Python Thread.start在子进程中阻塞?

时间:2016-01-21 22:59:09

标签: python multithreading locking subprocess

我有一个Python类,它启动一个运行另一个Python程序的subprocess;它做的第一件事就是用threading.Thread来做其他一些其他工作。但是,无论线程的target是什么,Thread.start调用都是阻塞的,并且程序的其余部分不会被执行。

可能导致此问题的原因是什么?这是关于Python全局解释器锁的一般问题吗?

编辑:对于更多背景,它是一个运行单个PyTest单元测试的子进程;在单元测试中,正在启动一个线程来创建服务器(服务器创建不是问题,无论如何都会出现threading.Thread.start问题。)

子进程调用是

subprocess.Popen(['/usr/local/bin/py.test', '-v', test_path, '-k', 
                               test_name],
                               cwd=grading_path,
                               env=env,
                               stdout=subprocess.PIPE, 
                               stderr=subprocess.PIPE)

stdout, stderr = result.communicate()

并且线程调用是

def test_case_1(self):
    t = Thread(target=time.sleep, args=(1,)) # fake target, doesn't work regardless
    t.start() # it blocks here

    ... other logic ....

子进程与父进程之间存在通信;子进程基本上只发回一些结果数据。

0 个答案:

没有答案