multiprocessing.Process subprocess.Popen完成了吗?

时间:2013-03-17 00:54:52

标签: python process multiprocessing maya

我有一台启动命令行应用的服务器。它们接收本地文件路径,加载文件,导出内容,然后关闭。

它正在运行,但我希望能够跟踪哪些任务处于活动状态以及哪些任务已完成。

所以用这一行:     p = mp.Process(target = subprocess.Popen(mayapy +' - u'+ job.pyFile),group = None)

我尝试了'is_alive',它总是返回False。

子进程关闭,我看到它在任务管理器中关闭了,但进程和pid似乎仍然可以查询。

1 个答案:

答案 0 :(得分:2)

你使用mp.Process是错误的。 target应该是一个函数,而不是subprocess.Popen(...)的返回值。

无论如何,如果你定义:

proc = subprocess.Popen(mayapy + ' -u ' + job.pyFile)

当进程正常时,proc.poll()将为None,并且当进程终止时,它将等于返回值(不是None)。


例如,(输出在评论中)

import subprocess
import shlex
import time
PIPE = subprocess.PIPE

proc = subprocess.Popen(shlex.split('ls -lR /'), stdout=PIPE)
time.sleep(1)
print(proc.poll())
# None

proc.terminate()
time.sleep(1)
print(proc.poll())
# -15