当使用subprocess.Popen()从我的
python脚本中生成同一应用程序的几个实例时,我遇到一些问题,使用线程让它们同时运行.在每个线程中,我使用popen()调用运行应用程序,然后等待它通过调用wait()来完成.问题似乎是wait() – 调用实际上并不等待进程完成.我仅使用一个线程进行实验,并在进程开始时打印文本消息,以及完成时.所以线程函数看起来像这样:
def worker():
while True:
job = q.get() # q is a global Queue of jobs
print('Starting process %d' % job['id'])
proc = subprocess.Popen(job['cmd'], shell=True)
proc.wait()
print('Finished process %d' % job['id'])
job.task_done()
但即使我只使用一个线程,它会打印出几个“启动进程…”消息,然后任何“完成进程…”消息出现.有没有wait()实际上不等待的情况?我有几个不同的外部应用程序(C控制台应用程序),反过来将有几个实例同时运行,其中一些我的代码工作,但对于其他的它不会.外部应用程序可能会有某些问题影响到wait()的调用?
用于创建线程的代码如下所示:
for i in range(1):
t = Thread(target=worker)
t.daemon = True
t.start()
q.join() # Wait for the queue to empty
更新1:
我还应该补充