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

时间:2011-01-24 12:01:00

标签: python process subprocess multiprocessing

我正在尝试使用python的subprocess模块启动一个需要很长时间的java进程。

我实际上在做的是使用multiprocessing模块启动新流程,并使用该流程,使用subprocess模块运行java -jar

这很好用,但是当我启动新进程时,java进程会替换运行python Process的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

当执行while循环的进程到达run_task行时,我希望运行java的进程与正在运行break的进程一起被终止。这可能吗?

1 个答案:

答案 0 :(得分:0)

我认为你应该展示一些代码,不清楚你是如何一起使用子进程和多处理的。

从文档中看,子进程应该生成而不是替换新的Process-started进程。你确定没有发生吗?显示它的测试用例不会很好。

您可能会从Detach a subprocess started using python multiprocessing module

中获得一些提示