如何从多处理池终止 AsyncResult?

use*_*337 3 python pool multiprocessing

我有一个简单的代码,如下所示。第一个进程保留队列,因此没有一个进程完成。

我希望能够在 AsyncResult 超过 .get() 超时时杀死它,以便我的池队列可以继续前进。但是,如果不修改“myfunc”,我找不到任何简单的方法来做到这一点。有谁知道如何实现这一点?

import multiprocessing
import time


def myf(x):
    if x == 0:
        time.sleep(100)
    else:
        time.sleep(2)
    return 'done'


pool = multiprocessing.Pool(processes=1)
results = []
for x in range(8):        
  results.append(pool.apply_async(myf,args=[x]))
pool.close()

for res in results:
    try:
      print res.get(3)
    except Exception as e:
      print 'time out'
Run Code Online (Sandbox Code Playgroud)

nox*_*fox 5

multiprocessing.Pool尚未针对此类用例而设计。

强迫其中一名工人自杀将导致不确定的行为,可能会导致永远卡在原处,甚至导致程序崩溃。

有一些库可以解决您的问题。pebble允许您为您的工作人员设置超时,并在超过时间限制时停止他们。

之前问过类似的问题。