【问题标题】:Start long running process using subprocess module使用子进程模块启动长时间运行的进程
【发布时间】:2011-06-14 11:32:39
【问题描述】:

我正在尝试使用 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 循环的进程到达 break 行时,我希望运行 run_task 的进程与运行 java 的进程一起被杀死。这可能吗?

【问题讨论】:

  • 也许我误解了这个问题,但你为什么需要multiprocessing 模块?您可以单独使用 subprocess 函数启动子进程。
  • 我需要启动新进程,然后继续运行while循环来启动新进程。

标签: python process subprocess multiprocessing


【解决方案1】:

我认为您应该显示一些代码,尚不清楚您如何同时使用子进程和多进程。

从文档看来,子进程应该产生而不是替换你的新进程启动进程。你确定这不会发生吗?一个测试用例表明它不是很好。

你可能会从Detach a subprocess started using python multiprocessing module得到一些提示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 2013-09-05
    • 2010-11-12
    • 2012-09-28
    • 2011-08-09
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多