python多处理池,等待进程并重新启动自定义进程

Evg*_*Evg 7 python multiprocessing

我使用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)
...
Run Code Online (Sandbox Code Playgroud)

我尝试使用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
Run Code Online (Sandbox Code Playgroud)

为什么加入不工作?什么是等待所有流程的好方法.

我的第二个问题是如何在池中重启某个进程?我在内存泄漏的原因需要这个.现在实际上我在所有进程完成任务后重建所有池(创建新的对象池来重新启动进程).

我需要的是:例如我在游泳池中有4个进程.然后进程得到他的任务,任务完成后我需要杀死进程并启动新的(刷新内存泄漏).

aar*_*ing 19

您收到错误是因为您需要在致电pool.close()前致电pool.join()

我不知道关闭一个开始的进程的好方法,apply_async但看看是否正确关闭池不会让你的内存泄漏消失.

我认为这是因为Pool该类具有一系列属性,这些属性是以守护进程模式运行的线程.所有这些线程都被该join方法清理干净.你现在拥有的代码不会清理它们,所以如果你创建一个新代码Pool,你仍然可以从最后一个运行所有这些线程.