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 中使用过多重处理,我想寻求帮助。
有什么提示吗?
谢谢!
太大除以 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 之类的东西,或者重新考虑您的算法。