multiprocessing.Process与subprocess.Popen完成了吗?
我有一台服务器,可以启动命令行应用程序。这些程序会接收一个本地文件路径,加载文件,导出一些东西,然后关闭。
现在这个功能是正常的,但我想能够跟踪哪些任务正在进行,哪些任务已经完成。
我用这行代码来启动任务:
p = mp.Process(target=subprocess.Popen(mayapy + ' -u ' + job.pyFile), group=None)
我试过用'is_alive'来检查任务是否还在运行,但它总是返回False。
虽然子进程已经关闭,我在任务管理器里也能看到它关闭了,但进程和进程ID似乎还是可以查询的。
1 个回答
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