将独立循环分解为并行线程/进程的天真且最简单的方法

sol*_*sol 5 python parallel-processing

  1. 我有一个密集计算循环,我希望它们使用多核处理器加速,因为它们是独立的:所有都是并行执行的.在python中最简单的方法是什么?
  2. 让我们假设这些计算必须在最后总结.如何轻松地将它们添加到列表或浮点变量?

感谢您的所有教学答案和使用python库; o)

NPE*_*NPE 11

根据我的经验,多线程可能不会成为加快速度的可行选择(由于Global Interpreter Lock).

一个很好的选择是multiprocessing模块.这可能会或可能不会很好,取决于您最终必须从一个进程传递到另一个进程的数据量.

另一个好的选择是考虑使用numpy你的计算(如果你还没有).如果您可以对代码进行矢量化,那么即使在单核上,您也应该能够实现显着的加速.根据您正在做什么以及您的构建numpy,它甚至可以透明地将计算分布在多个核心上.

编辑以下是使用multiprocessing模块执行简单计算的完整示例.它使用四个过程来计算从0到9的数字的平方.

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    pool = Pool(processes=4)              # start 4 worker processes
    inputs = range(10)
    result = pool.map(f, inputs)
    print result
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的例子.鉴于其微不足道的性质f(),这个并行版本几乎肯定会比连续计算相同的东西慢.