2011-10-19 14 views
0

データの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を自由に使うことができるからです。

私は完全にマルチプロセッシングに新しいので、私は紛失しているものがあると確信しています。どんなアドバイス/提案や読書資料も素晴らしいでしょう!

答えて

2

私が過去に行ったことは、データエントリを処理する「ワーカークラス」を作成することでした。次に、それぞれがワーカークラスのコピーを実行するX個のスレッドをスピンアップします。データセット内の各項目は、ワーカースレッドが監視しているキューにプッシュされます。キューに項目がなくなると、スレッドはスピンします。

この方法を使用すると、約3秒で5スレッドを使用して10,000以上のデータアイテムを処理できました。アプリがシングルスレッドのみだった場合、これにはかなりの時間がかかります。

チェックアウト:

0

MapReduceの実装をPythonで調べることをおすすめします。ここに1つ:http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=mapreduce+python。また、Celeryと呼ばれるPythonパッケージ:http://celeryproject.org/を見てください。セロリを使用すると、1台のマシン上のコアだけでなく、サーバーファーム(クラスタ)にも計算を分散できます。より柔軟なセットアップ/メンテナンスで柔軟性を確保してください。

+0

http://docs.python.org/library/queue.htmlはありがとうございます。私は実際にhadoop(そしてhbase)で実行されているオーバーオールプロセスを持っています。その罰金しかし、私はより多くの機能を追加し、より多くのコアを利用したい。セロリが面白そうに見えてきます。 – Lostsoul

関連する問題