如何在 Python 中并行化列表理解计算?

新手上路,请多包涵

列表理解和映射计算都应该——至少在理论上——相对容易并行化:列表理解中的每个计算都可以独立于所有其他元素的计算来完成。例如在表达式中

[ x*x for x in range(1000) ]

每个 x*x 计算都可以(至少在理论上)并行完成。

我的问题是:是否有任何 Python 模块/Python 实现/Python 编程技巧来并行化列表理解计算(以便使用所有 16 / 32 / … 核心或将计算分布在计算机网格或在云上)?

原文由 phynfo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 681
2 个回答

正如 Ken 所说,它不能,但是使用 2.6 的 多处理 模块,并行计算非常容易。

 import multiprocessing

try:
    cpus = multiprocessing.cpu_count()
except NotImplementedError:
    cpus = 2   # arbitrary default

def square(n):
    return n * n

pool = multiprocessing.Pool(processes=cpus)
print(pool.map(square, range(1000)))

文档 中还有一些示例展示了如何使用管理器执行此操作,这也应该允许分布式计算。

原文由 Mahmoud Abdelkader 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于共享内存并行性,我推荐 joblib

 from joblib import delayed, Parallel

def square(x): return x*x
values = Parallel(n_jobs=NUM_CPUS)(delayed(square)(x) for x in range(1000))

原文由 Fred Foo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题