首页 > 解决方案 > Python Multiprocesing apply_async 运行不正常

问题描述

我最近遇到了一个让我困惑的 Python 多处理包问题。在一个程序中,我有以下几行代码:

import multiprocessing as mp

...

def logResult(result):
    results.append(result)

cpu = mp.cpu_count()
pool = mp.Pool(processes=cpu)

results = []
num = 400 # A tunable parameter
for x in range(0, num):
    pool.apply_async(integrationFunction, args=(<some list of arguments...>), callback=logResult)

pool.close()
pool.join()

print(len(results)) # Unpredictable

...

我无法确切透露 中发生了什么integrationFunction,但我知道以下内容: - 它numpy.dblquad在某些时候使用,并且可能非常慢。

问题是,在最后一行代码中,我打印results列表的长度,每次运行程序时都会得到一个不稳定的结果 - 它通常会打印 100-120 左右的一些数字num,而在 400 时,但在奇怪的情况下,它可能会打印超出范围的数字(有时甚至是 0)。但我希望它能够准确打印num(在这个例子中是 400)——这可能是什么原因造成的?

谢谢!

标签: pythonmultiprocessing

解决方案


推荐阅读