线程中的子进程。线程挂起

时间:2012-08-05 14:19:20

标签: python multithreading apache cgi subprocess

我无法理解为什么代码会出现问题。当我从控制台运行它时一切都很好,但是当我尝试通过浏览器运行它时页面挂起。 我正在使用Python 2.7.2。

class MyThread(threading.Thread):
    def __init__(self):
        self.stdout = None
        self.stderr = None
        threading.Thread.__init__(self, name="snapshot",)

    def run(self):
        p = subprocess.Popen(["pwd"], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None)
        p.communicate()

myThread = MyThread()
myThread.start()
myThread.join()

更新 我用Apache作为CGI运行Python。正在运行的系统是Gentoo 2.1。

我认为问题出在Apache上。不知怎的,它阻止了新线程,但我不确定。

1 个答案:

答案 0 :(得分:0)

尝试使用shell=False运行此功能。

我怀疑当您在Web框架中运行此代码时,您实际上没有shell并且这会导致问题。

或者,您无法重复使用网络服务器进程中的stdoutstdin,并尝试使用subprocess.PIPE来解决问题。

我假设您实际上并不需要运行pwd并且您只是使用它作为示例,但如果您真的需要pwd,这是一种不必要的复杂方法。只需将其替换为os.curdir属性。