subprocess.Popen 有时 return 非零退出代码
subprocess.Popen sometimes return non zero exit code
我的代码使用 subprocess.Popen 函数调用多个进程 运行ning 一个不同的 python 脚本,并等待所有进程完成 运行ning。
有时(并非所有 运行s,即使参数相同)一个或多个进程不是 运行ning(调用代码中的第一件事是在这些情况下不会创建的日志文件的创建。
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]
这可能是什么原因造成的?我该如何调查?
谢谢
您的进程编号 3、8、10 失败,这不是 python 问题,因为所有其他进程似乎都运行良好。也许你应该做 p.wait() 而不是 poll()
我的代码使用 subprocess.Popen 函数调用多个进程 运行ning 一个不同的 python 脚本,并等待所有进程完成 运行ning。 有时(并非所有 运行s,即使参数相同)一个或多个进程不是 运行ning(调用代码中的第一件事是在这些情况下不会创建的日志文件的创建。
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]
这可能是什么原因造成的?我该如何调查? 谢谢
您的进程编号 3、8、10 失败,这不是 python 问题,因为所有其他进程似乎都运行良好。也许你应该做 p.wait() 而不是 poll()