multiprocessing.Process与subprocess.Popen完成了吗?

1 投票
1 回答
1339 浏览
提问于 2025-04-17 19:22

我有一台服务器,可以启动命令行应用程序。这些程序会接收一个本地文件路径,加载文件,导出一些东西,然后关闭。

现在这个功能是正常的,但我想能够跟踪哪些任务正在进行,哪些任务已经完成。

我用这行代码来启动任务:

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

撰写回答