Python Thread Pool - процесс никогда не заканчивается - PullRequest
0 голосов
/ 06 марта 2012

Ниже приведен тестовый код - я играюсь с Пулом потоков, найденным в стандартной библиотеке. Проблема в том, что окончательный процесс никогда не заканчивается. Просто висит.

Я должен упомянуть, что мне нужно, функция в зависимости от ввода может занять от нескольких секунд до нескольких минут, и я хочу, чтобы они закончили как можно скорее - в порядке того, что заканчивается первым. В идеале число «func», которое я буду выполнять, должно быть около четырех из пяти одновременно.

>>> from multiprocessing.pool import ThreadPool
>>>
>>> def func(i):
...     import time
...     if i % 2 == 0: time.sleep(5)
...     print i
... 
>>> t = ThreadPool(5)
>>> 
>>> for i in range(10):
...     z = t.Process(target=func, args=(i,))
...     z.start()
... 
1
3
5
7
9

>>> 0
2
4
6
8

Другими словами, после печати «8» код просто ждет здесь, пока я не вызову KeyboardInterrupt. Я пытался установить процесс как демон, но не повезло. Любой совет / лучшая документация?

1 Ответ

0 голосов
/ 06 марта 2012

Из документации

Рабочие процессы в пуле обычно работают в течение всей рабочей очереди пула.

Вы, вероятно, должны использовать для такой задачи

t.imap(func,xrange(10))
t.close()
t.join()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...