2016-04-17 12 views
-1

私は置き換え(積)を使って膨大な数の並べ替えを作成しています。計算に時間がかかります。Python itertools multiprocessing

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

permutation(range(11)) 

この関数を複数のプロセス(「プール」クラスなどを使用して)に分割する方法はわかりません。私はPythonでマルチプロセッシングを使用したことは一度もありません。私は助けを求めたいと思います。

ヒント

ありがとうございます!

+0

['multiprocessing'](https://docs.python.org/2/library/multiprocessing.html)モジュールを調べましたか? – Cyb3rFly3r

+0

これはあまり簡単ではありません。このジョブを分割したり、各スレッド(またはプロセス)が独自の順列を生成するようにする必要があります。 – ForceBru

+0

'cartesian'(' sklearn.utils.extmath import cartesian')を試してみてください。 4つのコアでのマルチプロセッシングよりもスピードアップが可能です。 – ptrj

答えて

1

4で割ってもまだ大きすぎます。 unutbuさんのコメントに感謝します。これは、マルチプロセッシングでは4で割ったものです。

しかし、ここであなたがyour_processに便利な何かをすることを想定し、わずか3 ** 2の実施例である:

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)) 

しかし、あなたが本当に> 11 **> 20の順列を持っている場合は、使用を検討してください分散コンピューティングやBOINCのようなもの、あるいはあなたのアルゴリズムを再考するかもしれません。

+0

echo "4で割った値が大きすぎます" – Mai

関連する問題