我的目标非常简单:
在n秒后终止池中的所有进程。
p = Pool(5)
def f(x):
return x*x
p.map(f, [1,2,3])
我需要使用Pool而不是multiprocessing.Process
有没有办法终止整个池或其中的所有进程?
线程池也是一种选择。
答案 0 :(得分:0)
您无法使用线程执行此操作(无法强制线程从外部退出)。您可以terminate()
进程池。
这样的东西,但你需要使用map_async。如果您使用阻止地图,那么您可能会运气不好。
from multiprocessing import Pool
from time import sleep
def worker(x):
print(x)
sleep(50)
tasks = [x for x in range(0,10)]
p = Pool()
q = p.map_async(worker, tasks)
q.wait(10)
try:
p.terminate()
p.join()
except:
pass
print("done")
这会将任务提交到池中,并在10秒后终止池(如果尚未完成)。这可能适用于您的目的,也可能不适用。