Py学习  »  Python

Python多处理并行化内部或外部循环

Adam • 3 年前 • 1714 次点击  

假设我们有一些操作,比如:

groups = ['A','B','C']
idx = [n for n in range(1000)]
for group in groups:
    for i in idx:
        # Compute something

哪里 idx 远大于 groups .

为了加快速度,我已经研究了 multiprocessing joblib 在Python中。然而,我们应该在外环上并行化(拆分 for group in groups 或者在内部循环上并行化(拆分 for i in idx 将逻辑转化为并行逻辑?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133910
文章 [ 1 ]  |  最新文章 3 年前
caesar
Reply   •   1 楼
caesar    3 年前

这在很大程度上取决于组的数量、核的数量、实际计算的繁重程度,以及我可能忘记的其他几个因素。通过创建一个迭代器来生成所有的元组,可以避免考虑这个问题 (group, i) 出现在内部循环中,即将两个循环折叠为一个。这可以通过itertool's(cross)实现 product :

粗略的例子:

from itertools import product
from multiprocessing import Pool
with Pool() as p:
    p.map(compute_something, product(groups, idx)))

在大多数情况下,这应该可以很好地工作。