Завершить пул процессов Python 2.7 - PullRequest
0 голосов
/ 01 мая 2018

Моя цель довольно проста:

Завершить все процессы в пуле через n секунд.

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

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

Мне нужно использовать пул, а не многопроцессорную обработку. Процесс

Есть ли способ завершить весь пул или все процессы в нем?

Также возможно использование пула потоков.

1 Ответ

0 голосов
/ 01 мая 2018

Вы не можете сделать это с потоками (нет способа заставить поток выйти снаружи). Вы можете 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 секунд завершает пул, если он еще не завершен. Это может или не может быть подходящим для ваших целей.

...