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

标签 python parallel-processing

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

相关文章:

c - 为什么 MPI_Sendrecv 会阻塞?

parallel-processing - MPI_Bcast() 是否阻塞?

python - 如何一起使用多处理池和队列?

python - 调整窗口大小时 tkinter 获取 <ButtonRelease-1>

java - 无法在 Elasticsearch 中对大文件进行批量索引

python - 仅用制表符分隔符替换某些行结尾

loops - 使用 Windows PowerShell 脚本并行编译 LaTeX 文件

python - 如何在 Django 模板中获取反向引用?

python - 对导入的列表进行排序不起作用

scala - 如果数据适合一台机器,使用 Spark 有意义吗?