【发布时间】:2017-09-27 14:03:52
【问题描述】:
我的代码使用 subprocess.Popen 函数调用多个运行不同 python 脚本的进程,并等待所有进程完成运行。 有时(不是所有的运行,即使具有相同的参数)一个或多个进程没有运行(调用代码中的第一件事是创建一个日志文件,该文件不是在那些例)。
for fname1 in input_files_1:
cmd_list = create_batch_cmd(fname1)
print (' '.join(cmd_list))
p_list.append(Popen(' '.join(cmd_list), shell=True))
logging.info("started process for %s" % fname1)
logging.info("waiting for processes")
ps_status = []
while True:
ps_status = [p.poll() for p in p_list]
if all([x is not None for x in ps_status]):
break
logging.info("all processes finished")
print ps_status
ps_status 通常是一个零列表。 在 12 个进程的运行中,当 3 个失败时,ps_status 为:
[0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0]
是什么原因造成的?我该如何调查? 谢谢
【问题讨论】:
-
你知道你可以写
ps_status = [p.wait() for p in p_list]而不是整个while-construct?
标签: python subprocess multiprocessing exit-code