小编典典

如何并行化一个简单的 Python 循环?

all

这可能是一个微不足道的问题,但是如何在 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 上运行。

并行化此代码的最简单方法是什么?


阅读 90

收藏
2022-03-23

共1个答案

小编典典

由于全局解释器锁 (GIL),在 CPython 上使用多个线程不会为纯 Python
代码提供更好的性能。我建议改用该multiprocessing模块:

pool = multiprocessing.Pool(4)
out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))

请注意,这在交互式解释器中不起作用。

为了避免 GIL 周围的常见 FUD:无论如何,在这个例子中使用线程不会有任何优势。你 在这里使用进程,而不是线程,因为它们避免了一大堆问题。

2022-03-23