【发布时间】:2011-04-10 14:16:40
【问题描述】:
我使用 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 个进程。然后进程得到他的任务,任务完成后我需要杀死进程并开始新的(刷新内存泄漏)。
【问题讨论】:
-
为什么
multiprocessing/pool.py住在site-packages而不是直接住在Lib?如果你一直在破解它,那么我们需要知道。 -
hmm.. 我不知道我用 Windows 安装程序安装它...从官方网站获得..