【问题标题】:Terminate pool processes python 2.7终止池进程python 2.7
【发布时间】:2018-10-11 13:59:51
【问题描述】:

我的目标很简单:

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

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

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

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

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

线程池也是一种选择。

【问题讨论】:

  • 你说的是进程池还是线程池?您的问题涉及进程,但您已将其标记为线程池。
  • @Hannu 线程也是一个选项。我更新了问题。谢谢
  • 你看过Pool.close()Pool.terminate()吗(terminate()应该是最后的手段)。

标签: python multithreading python-2.7 multiprocessing threadpool


【解决方案1】:

您不能对线程执行此操作(无法强制线程从外部退出)。你可以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 秒后终止池。这可能适合也可能不适合您的目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2016-12-03
    • 2014-10-25
    相关资源
    最近更新 更多