我有一个简单的代码,如下所示。第一个进程阻止队列,因此没有一个完成。
如果超过.get()超时,我希望能够杀死AsyncResult,这样我的池队列就可以继续了。 但是,在没有修改“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'
答案 0 :(得分:4)
multiprocessing.Pool
并非针对此类用例而设计。
强迫其中一名工人自杀将导致未定义的行为,这可能会因为永远停留在那里而导致程序崩溃。
有些库可以解决您的问题。 pebble允许您为工作人员设置超时,并在超过时间限制时停止工作。