データの2つの辞書があり、それぞれの辞書のエントリを分析し、設定した特定の指標に基づいてルールエンジンとして機能する関数を作成しました(役立つ場合は、グラフ内のノードであり、ルールが一致すると、それらの間にエッジが作成されます)。ここでPythonで辞書をマルチプロセッシングする
は(。ルール関数に辞書の部分に渡し、forループのA私は私が読んチュートリアルに私のコードをリファクタリング)私が使用するコードです:
jobs = []
def loadGraph(dayCurrent, day2Previous):
for dayCurrentCount in graph[dayCurrent]:
dayCurrentValue = graph[dayCurrent][dayCurrentCount]
for day1Count in graph[day2Previous]:
day1Value = graph[day2Previous][day1Count]
#rules(day1Count, day1Value, dayCurrentCount, dayCurrentValue, dayCurrent, day2Previous)
p = multiprocessing.Process(target=rules, args=(day1Count, day1Value, dayCurrentCount, dayCurrentValue, dayCurrent, day2Previous))
jobs.append(p)
p.start()
print ' in rules engine for day', dayCurrentCount, ' and we are about ', ((len(graph[dayCurrent])-dayCurrentCount)/float(len(graph[dayCurrent])))
私が勉強していたデータむしろ大きくなる可能性があります(ランダムに生成されるため)。毎日約50,000のエントリーがあると思います。ほとんどの時間がこのステージに費やされているので、これをより速く処理するのに役立つ8つのコアを使用できるかどうかは私には分かりませんでした。
前の日から各辞書エントリが辞書エントリと比較されているので、私はそれを分割することができると思っていましたが、上記のコードは普通のものより遅いです。私は、これが、すべてのエントリーのために新しいプロセスを作り出すからだと思う。
これをスピードアップしてすべてのCPUを使用する方法はありますか?私の問題は、私は辞書全体を渡したくないということです。なぜなら、一つのコアがそれを処理してしまうからです。私はむしろ、各CPUにプロセスを分割するか、またはこれに対して最大のすべてのCPUを自由に使うことができるからです。
私は完全にマルチプロセッシングに新しいので、私は紛失しているものがあると確信しています。どんなアドバイス/提案や読書資料も素晴らしいでしょう!
http://docs.python.org/library/queue.htmlはありがとうございます。私は実際にhadoop(そしてhbase)で実行されているオーバーオールプロセスを持っています。その罰金しかし、私はより多くの機能を追加し、より多くのコアを利用したい。セロリが面白そうに見えてきます。 – Lostsoul