使用subprocess模块启动长时间运行的进程

0 投票
1 回答
1229 浏览
提问于 2025-04-16 10:31

我想用Python的 subprocess 模块来启动一个需要很长时间才能完成的Java进程。

实际上,我是用 multiprocessing 模块来启动一个新的进程,然后在这个新进程里使用 subprocess 模块来运行 java -jar

这样做是可以的,但当我启动这个新进程时,Java进程会替代正在运行的Python进程。我希望Java能作为一个子进程运行,也就是说,当启动新 multiprocessing.Process 的那个进程结束时,运行Java的进程也能一起结束。

这样做可以吗?

谢谢。

补充:这里有一些代码来更清楚地说明我的问题:

def run_task():
    pargs = ["java -jar app.jar"]
    p = Popen(pargs)
    p.communicate()[0]
    return p

while(True):
    a = a_blocking_call()

    process = Process(target=run_task)
    process.start()

    if not a:
        break

我希望运行 run_task 的进程在执行while循环到达 break 这一行时能和运行Java的进程一起被杀掉。这可能吗?

1 个回答

0

我觉得你应该展示一些代码,因为现在不太清楚你是怎么把subprocess和multiprocessing一起使用的。

根据文档来看,subprocess应该是启动一个新的进程,而不是替换你用Process启动的那个进程。你确定没有发生这种情况吗?如果能提供一个测试案例来证明这一点就好了。

你可以从这个链接中获得一些提示:使用Python multiprocessing模块启动的子进程分离

撰写回答