2012-02-16 9 views
6

私は分散コードに挑戦し始めており、そこにあるすべてのものに基づいて自分のニーズに合った解決策を見つけ出すことができません。基本的に私は単一の関数で処理する必要のあるデータのpythonリストを持っています。この関数は、いくつかのforループをネストしていますが、リスト上の各項目に対して長時間(約1分)かかることはありません。私の問題はリストが非常に大きいことです(3000以上のアイテム)。私はマルチプロセッシングを検討していますが、マルチサーバーの処理を試してみたいと思います(データが大きくなると、ジョブを実行するためにサーバーを増やすことができれば理想的です) 。パイソンデータ/コードをワーカーノードに配布するための提案?

だから私の質問は、どのようなパッケージができます私は基本的に私がしてこのデータリストを配布することができます何かを探して(スーパー必要ないと私はまた、このを通じて私のコードベースを配布することができれば、それはいいだろう)私はこれを達成するために使う?私のデータベースはhbaseなので、すでにhadoopが稼働しています(hadoopは使用されていませんが、データベース用です)。私はセロリを見て、ひねりましたが、私のニーズに合うものは混乱しています。

提案がありますか?

答えて

4

と手に手を働くことができる、私は非常にceleryをお勧めします。あなたは簡単にこのようなリストを並列化することができます

from celery.task import task 
@task 
def process(i): 
    # do something with i 
    i += 1 
    # return a result 
    return i 

results = [] 
todo = [1,2,3,4,5] 
for arg in todo: 
    res = process.apply_async(args=(arg)) 
    results.append(res) 

all_results = [res.get() for res in results] 

これはちょうどより多くセロリの労働者を追加することにより、容易にスケーラブルであるあなたは、あなたのリストの単一項目で動作するタスクを定義することができます。

2

チェックアウトrabbitMQ。 Pythonバインディングはpikaから利用できます。単純なwork_queueで始まり、ほとんど実行されませんrpc calls

rabbitMQのような外部エンジンを使ってPythonで分散コンピューティングを実験するのは面倒かもしれませんが(ウサギをインストールして設定するための小さな学習曲線があります)、後でさらに役立つかもしれません。

...とセロリはRabbitMQの、チェックアウトrobert pogorzelski's tutorialSimple distributed tasks with Celery and RabbitMQ

関連する問題