Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免python中的孤立进程、多进程和子进程?_Python_Python 3.x_Multiprocessing_Subprocess - Fatal编程技术网

如何避免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()
即可停止正在进行的任务。