这可能是一个微不足道的问题,但是如何在 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模块:
multiprocessing
pool = multiprocessing.Pool(4) out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
请注意,这在交互式解释器中不起作用。
为了避免 GIL 周围的常见 FUD:无论如何,在这个例子中使用线程不会有任何优势。你 想 在这里使用进程,而不是线程,因为它们避免了一大堆问题。