Я использовал многопроцессорность python и ожидаю всех процессов с помощью этого кода:
...
results = []
for i in range(num_extract):
url = queue.get(timeout=5)
try:
print "START PROCESS!"
result = pool.apply_async(process, [host,url],callback=callback)
results.append(result)
except Exception,e:
continue
for r in results:
r.get(timeout=7)
...
Я пытаюсь использовать pool.join, но получаю ошибку:
Traceback (most recent call last):
File "C:\workspace\sdl\lxchg\walker4.py", line 163, in <module>
pool.join()
File "C:\Python25\Lib\site-packages\multiprocessing\pool.py", line 338, in joi
n
assert self._state in (CLOSE, TERMINATE)
AssertionError
Почему присоединяться не работай? И как лучше подождать все процессы.
Мой второй вопрос: как я могу перезапустить определенный процесс в пуле? мне это нужно по причине утечки памяти. На самом деле я перестраиваю весь пул после того, как все процессы выполнили свои задачи (создайте новый пул объектов для перезапуска процесса).
Что мне нужно: например у меня 4 процесса в пуле. Затем процесс получает свою задачу, после того, как задача будет выполнена, мне нужно убить процесс и запустить новый (чтобы обновить утечку памяти).