Python多处理:如何在异常时关闭多处理池

2024-04-24 20:31:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python多处理来分割一个较长的进程并并行运行。它工作正常,除非其中一个子进程出现异常,在这种情况下,进程池未关闭,而且我仍然可以在服务器上看到这些进程。

代码如下:

from multiprocessing import Pool
pool = Pool(processes=4)
from functools import partial
param_data = "Test Value"
func = partial(test_function, param_data)
r = pool.map(func, range(3))
pool.close()

def test_function(param_data,index):
   try:
      # The process here;
   except Exception as e:
      # Close the process pool;

在except块中给出pool.close

NameError: global name 'pool' is not defined

我试图用以下代码异常终止进程。

    except Exception as e:
       import os
       import signal
       pid = os.getpid()
       os.kill(pid, signal.SIGTERM) 

但我仍然可以看到服务器上的进程。这仍然不是最好的解决方案,因为这只会终止遇到异常的子进程,其他进程仍将继续。

我希望所有进程在完成时终止,不管它们是否遇到异常。

我在跑Python2.7

注意:我不能在服务器上安装像psutil这样的新库,我正在尝试使用标准python库来解决这个问题。

我在这个论坛上检查了一些类似的问题,比如,auto kill process and child,但它们并不是真正的问题。


Tags: 代码fromtestimport服务器dataparam进程