终止池进程python 2.7

时间:2018-05-01 14:10:44

标签: python multithreading python-2.7 multiprocessing threadpool

我的目标非常简单:

在n秒后终止池中的所有进程。

p = Pool(5)
def f(x):
  return x*x

p.map(f, [1,2,3]) 

我需要使用Pool而不是multiprocessing.Process

有没有办法终止整个池或其中的所有进程?

线程池也是一种选择。

1 个答案:

答案 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秒后终止池(如果尚未完成)。这可能适用于您的目的,也可能不适用。