gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:17:54 26 4
gpt4 key购买 nike

我使用了 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 个进程。然后进程得到他的任务,任务完成后我需要终止进程并启动新进程(以刷新内存泄漏)。

最佳答案

您收到错误是因为您需要在调用 pool.join() 之前调用 pool.close()

我不知道关闭以 apply_async 启动的进程的好方法,但看看正确关闭池是否不会使内存泄漏消失。

我之所以这么认为是因为Pool类有一堆属性是运行在守护进程模式下的线程。 join 方法清除了所有这些线程。您现在拥有的代码不会清理它们,因此如果您创建一个新的 Pool,您仍然会从上一个线程运行所有这些线程。

关于python多处理池,等待进程并重新启动自定义进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3682469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com