пул многопроцессорной обработки python, ожидание процессов и перезапуск настраиваемых процессов

Я использовал многопроцессорность 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 процесса в пуле. Затем процесс получает свою задачу, после того, как задача будет выполнена, мне нужно убить процесс и запустить новый (чтобы обновить утечку памяти).

7
задан Evg 10 September 2010 в 05:39
поделиться