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

时间:2011-07-11 14:58:20

标签: python parallel-processing

  1. 我有一个密集计算循环,我希望它们是 使用多核处理器加速,因为它们是独立的: 全部并行执行。这是最简单的方法 蟒?
  2. 让我们假设这些计算必须在最后总结。如何轻松地将它们添加到列表或浮点变量?
  3. 感谢您所有的教学答案和使用python库; o)

2 个答案:

答案 0 :(得分:10)

根据我的经验,多线程可能不会成为加快速度的可行选择(由于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

这是一个简单的例子。考虑到f()的微不足道的性质,这个并行版本几乎肯定比连续计算相同的东西慢。

答案 1 :(得分:1)

在CPython中进行多核处理有点困难(感谢GIL)。但是,它们是multiprocessing模块,它允许使用子进程(而不是线程)来分割您在多个核心上的工作。

只要您的代码可以真正拆分为多个部分并且不依赖于共享对象,该模块就可以相对简单地使用。链接的文档应该是一个很好的起点。