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

标签 python parallel-processing

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

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

最佳答案

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

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

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

edit 下面是使用 multiprocessing 模块执行简单计算的完整示例。它使用四个过程来计算从零到九的数字的平方。

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() 的微不足道的性质,这个并行版本几乎肯定会比串行计算相同的东西慢。

关于python - 将独立循环分解为并行线程/进程的简单且最简单的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6652124/

相关文章:

c# - Plinq 里面的 Plinq?

python - 让主人在任务农场工作

javascript - 如何使用并行网络 worker ?

python - 溢出错误 : int too big to convert when formatting date on pandas series plot

python - 重新排列优先级队列的优先级(有效方式)

python - pygame.display.set_mode().fill((0, 200, 255)) 中的 fill()

c - 单线程模式下并行合并非常慢

python - reshape pandas 数据框,将分类列转换为单独的列

Python 与 MATLAB 计算无穷大的积分,结果不同,替代方案(即将 Gauss-Legendre 正交扩展到 -x-> Infinity)?

r - 并行组合进度条和进程