如何从多处理池中终止 AsyncResult?
How to terminate an AsyncResult from multiprocessing pool?
我有一个简单的代码,如下所示。第一个进程阻止了队列,因此 none 个已完成。
我希望能够在 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'
multiprocessing.Pool
尚未设计用于此类用例。
强迫其中一名工人自杀会导致不确定的行为,这可能会从永远卡在那里到让您的程序崩溃不等。
有些库可以解决您的问题。 pebble 允许您为您的工作人员设置超时并在超过时间限制时停止他们。
Similar question asked previously.
我有一个简单的代码,如下所示。第一个进程阻止了队列,因此 none 个已完成。
我希望能够在 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'
multiprocessing.Pool
尚未设计用于此类用例。
强迫其中一名工人自杀会导致不确定的行为,这可能会从永远卡在那里到让您的程序崩溃不等。
有些库可以解决您的问题。 pebble 允许您为您的工作人员设置超时并在超过时间限制时停止他们。
Similar question asked previously.