我一直在使用Python的多进程模块对一些代码进行性能分析('job'函数只是对数字求平方)。
data = range(100000000)
n=4
time1 = time.time()
processes = multiprocessing.Pool(processes=n)
results_list = processes.map(func=job, iterable=data, chunksize=10000)
processes.close()
time2 = time.time()
print(time2-time1)
print(results_list[0:10])
我发现奇怪的一件事是,最优块大小似乎在10k个元素左右 - 这需要16秒钟在我的电脑上。如果我将块大小增加到100k或200k,则速度会减慢至20秒。
这种差异可能是由于对更长列表进行pickle所需的时间更长吗? 100个元素的块大小需要62秒,我认为这是由于需要在不同进程之间传递块所需的额外时间。