我最近遇到了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)-发生这种情况的某些原因是什么?
谢谢!