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

2024-05-16 11:54:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 方法列表处理器教学浮点想象密集
2条回答

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

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

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

一个好的替代方案是^{}模块。这可能有效,也可能无效,这取决于您最终必须将多少数据从一个进程传递到另一个进程。

另一个好的选择是考虑使用^{}进行计算(如果还没有)。如果你能将你的代码矢量化,你应该能够在一个核心上实现显著的加速。它甚至可以透明地将计算分布在多个核心上,这取决于您具体在做什么,取决于您构建的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()的琐碎特性,这个并行版本几乎肯定比串行计算相同的东西慢。

相关问题 更多 >