Python itertools 多处理

301*_*114 2 python product permutation multiprocessing python-itertools

我正在创建大量带有替换(产品)的排列,它需要大量的计算时间。让我们使用像这样的简单函数:

def permutations(li):
    return [p for p in itertools.product(li, repeat=20)]

permutation(range(11))
Run Code Online (Sandbox Code Playgroud)

我只是不确定如何将此函数拆分为多个进程(使用“Pool”类或类似类)。我从未在 Python 中使用过多重处理,我想寻求帮助。

有什么提示吗?

谢谢!

cha*_*elo 5

太大除以 4 仍然太大。注意 unutbu 的评论:如果使用多重处理,则需要永远除以 4。

然而,这里只是 3**2 的一个工作示例,假设您将在以下方面做一些有用的事情your_process

import itertools
import multiprocessing

def your_process(perm):
    # this is where you process each permutation
    # currently it just prints the permutation.
    print(perm)

def permutations(li):
    with multiprocessing.Pool(4) as workers:
        workers.map(your_process, itertools.product(li, repeat=2))

permutations(range(3))
Run Code Online (Sandbox Code Playgroud)

但如果您确实有 >11**>20 排列,请考虑使用分布式计算或 BOINC 之类的东西,或者重新考虑您的算法。