如何避免python中的孤立进程、多进程和子进程?
我的函数如何避免python中的孤立进程、多进程和子进程?,python,python-3.x,multiprocessing,subprocess,Python,Python 3.x,Multiprocessing,Subprocess,我的函数entry\u function()首先使用ProcessPool(来自pebble)同时处理多个任务。每个任务都包括通过subprocess.run()调用外部jar文件 不幸的是,外部jar不稳定;有时它会崩溃。如果任何外部JAR崩溃,我希望停止所有操作并使用正确的退出代码退出entry\u function()。这是因为外部jar的每次执行都需要很多时间,我希望尽可能节省时间 问题是,当我为ProcessPool调用的进程调用future.cancel()时,它不会终止它们的子进程
entry\u function()
首先使用ProcessPool
(来自pebble
)同时处理多个任务。每个任务都包括通过subprocess.run()
调用外部jar文件
不幸的是,外部jar不稳定;有时它会崩溃。如果任何外部JAR崩溃,我希望停止所有操作并使用正确的退出代码退出entry\u function()
。这是因为外部jar的每次执行都需要很多时间,我希望尽可能节省时间
问题是,当我为ProcessPool调用的进程调用future.cancel()
时,它不会终止它们的子进程(即外部JAR)。因此,外部jar的进程成为孤立进程
这是我的代码摘要:
导入子流程
从pebble导入处理池
def entry_函数():
将ProcessPool()作为池:
future=pool.map(worker,iterables)
尝试:
对于将来的res.result():
已收集的\u res+=res
除subprocess.CalledProcessError为e外:
打印(“调用的进程错误:%s”%e.cmd)
future.cancel()#这将终止(并取消)工作进程
一无所获
已收回执
def工人(项目):
#准备命令
p=subprocess.run(cmd.split(),stdout=subprocess.PIPE,stderr=subprocess.PIPE,timeout=3600)#此进程未终止,成为孤立进程
p、 检查返回代码()
#用p.stdout做点什么
返回res
在这种情况下,如何避免为外部jar创建孤立进程?您使用的是什么操作系统?请将代码格式化为可用格式,否则人们将无法复制您的代码。最后,在
future.result()
之后调用future.cancel()
无效,因为此时任务已经完成。您需要调用future.cancel()
来停止正在进行的任务。您使用的是什么操作系统?请将代码格式化为可用格式,否则人们将无法复制您的代码。最后,在future.result()
之后调用future.cancel()
无效,因为此时任务已经完成。您只需调用future.cancel()
即可停止正在进行的任务。