我有一个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 ....
子进程与父进程之间存在通信;子进程基本上只发回一些结果数据。