三行代码  ›  专栏  ›  技术社区  ›  Adam

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

  •  0
  • Adam  · 技术社区  · 1 月前

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

    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 将逻辑转化为并行逻辑?

    1 回复  |  直到 1 月前
        1
  •  2
  •   Caesar    1 月前

    这在很大程度上取决于组的数量、核的数量、实际计算的繁重程度,以及我可能忘记的其他几个因素。通过创建一个迭代器来生成所有的元组,可以避免考虑这个问题 (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)))
    

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