使用subprocess模块启动长时间运行的进程
我想用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模块启动的子进程分离