Python 多处理池"raise ValueError("Pool 未运行")Value



我正在尝试并行运行在循环中具有返回值的函数。 但它似乎卡在 for 循环的第二次迭代中results = pool.map(algorithm_file.foo, population)

raise ValueError("Pool not running")
ValueError: Pool not running

示例代码:

from multiprocessing.dummy import Pool
import algorithm_file
population = [1, 3, 4]
pool = Pool(len(population))
total = list()
for _ in range(10):
results = pool.map(algorithm_file.foo, population)
pool.close()
pool.join()
total.append(sum(results))
print(total)

algorithm_file.py内的内容

from random import randint
def foo(x):
return x * randint(0,5)

我尝试将pool = Pool(len(population))放入 for 循环中,但程序无一例外地崩溃了。

我发现一些解决方案使用全局列表((。但是,无论如何都可以使用返回值来维护函数吗?

蟒蛇 3.7.3

我认为问题是一旦关闭池,就无法再次使用它。这就是为什么第一次迭代很好,但在第二次迭代中,你会得到"池未运行"。

因此,修复提供的代码段的一种方法是在每次迭代中实例化一个新池:

for _ in range(10):
pool = Pool(len(population))
results = pool.map(algorithm_file.foo, population)
pool.close()
pool.join()
total.append(sum(results))

但是,请注意,将池用作上下文管理器(IMO(更优雅和Pythonic,即

for _ in range(10):
with Pool(len(population)) as pool:
results = pool.map(algorithm_file.foo, population)
total.append(sum(results))

相关内容

  • 没有找到相关文章

最新更新