gpt4 book ai didi

python - 如何从多处理池中终止 AsyncResult?

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:16 27 4
gpt4 key购买 nike

我有一个简单的代码,如下所示。第一个进程阻止了队列,因此它们都没有完成。

如果 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 不是为这种用例设计的。

强制其中一名 worker 自杀会导致未定义的行为,这些行为可能从永远卡在那里到让您的程序崩溃不等。

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

Similar question asked previously.

关于python - 如何从多处理池中终止 AsyncResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35585254/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com