gpt4 book ai didi

Python 等待多处理池中的进程完成,无需关闭池或使用 map()

转载 作者:行者123 更新时间:2023-11-30 22:21:17 25 4
gpt4 key购买 nike

我有一个如下的代码段

pool = multiprocessing.Pool(10)
for i in range(300):
for m in range(500):
data = do_some_calculation(resource)
pool.apply_async(paralized_func, data, call_back=update_resource)
# need to wait for all processes finish
# {...}
# Summarize resource
do_something_with_resource(resource)

所以基本上我有两个循环。我在循环之外初始化进程池以避免过热。在第二个循环结束时,我想总结所有过程的结果。

问题是,由于data输入的变化,我无法使用pool.map()来等待。我也无法使用 pool.join()pool.close() 因为我仍然需要在下一次迭代中使用 pool第一个循环。

在这种情况下等待进程完成的好方法是什么?

我尝试在第二个循环结束时检查 pool._cache。

while len(process_pool._cache) > 0:
sleep(0.001)

这种方式可行,但看起来很奇怪。有更好的方法吗?

最佳答案

apply_async 将返回一个 AsyncResult 对象。这个对象有一个方法wait([timeout]),你可以使用它。

示例:

pool = multiprocessing.Pool(10)
for i in range(300):
results = []
for m in range(500):
data = do_some_calculation(resource)
result = pool.apply_async(paralized_func, data, call_back=update_resource)
results.append(result)
[result.wait() for result in results]
# need to wait for all processes finish
# {...}
# Summarize resource
do_something_with_resource(resource)

我尚未检查此代码,因为它不可执行,但它应该可以工作。

关于Python 等待多处理池中的进程完成,无需关闭池或使用 map(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680046/

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