2
我有一個簡單的代碼,如下所示。第一個進程阻止隊列,所以他們都沒有完成。如何終止多處理池中的AsyncResult?
我希望能夠殺死一個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'
您的代碼將在每個被阻止的進程3秒內「繼續」。你是說你想要自己取消myf嗎? – tdelaney
我知道for循環會繼續,但我也希望池隊列繼續前進。例如,我想終止「myf」,以便下一個池進程啓動。 – user1477337
你可以看看這個:http://stackoverflow.com/questions/492519/timeout-on-a-python-function-call,但如果我正確理解''multiprocessing.pool''源代碼,工人「功能,沒有辦法做到這一點,而不用改變'myf'或將其包裹在某種警報中。 –