这可能是一个微不足道的问题,但是如何在 python 中并行化以下循环?
# setup output lists
output1 = list()
output2 = list()
output3 = list()
for j in range(0, 10):
# calc individual parameter value
parameter = j * offset
# call the calculation
out1, out2, out3 = calc_stuff(parameter = parameter)
# put results into correct output list
output1.append(out1)
output2.append(out2)
output3.append(out3)
我知道如何在 Python 中启动单线程,但我不知道如何“收集”结果。
多个进程也可以 - 在这种情况下最简单的。我目前使用的是 Linux,但代码也应该在 Windows 和 Mac 上运行。
并行化此代码的最简单方法是什么?
最佳答案
由于全局解释器锁 (GIL),在 CPython 上使用多个线程不会为纯 Python 代码提供更好的性能。我建议使用 multiprocessing
改为模块:
pool = multiprocessing.Pool(4)
out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
请注意,这在交互式解释器中不起作用。
为了避免 GIL 周围的常见 FUD:无论如何,在这个示例中使用线程不会有任何优势。您想要在这里使用进程,而不是线程,因为它们可以避免一大堆问题。
关于python - 如何并行化一个简单的 Python 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9786102/