2012-03-05 17 views
7

セルラーリーのワーカーノード(キャッシュされた認可トークン、統計情報など)間で小さな情報を共有したい。セルリーワーカー間で1つのマシンで共有するメモリ領域

自分のタスクファイル内にグローバルを作成すると、それはワーカーごとに一意です(私のワーカーはプロセスであり、生涯のタスク/実行が1つあります)。

ベストプラクティスは何ですか? 状態を外部(DB)に保存するか、古い形式の共有メモリを作成する必要があります(セロリのプール実装が異なるために難しいでしょう)。

ありがとうございます!

+1

Redisのようなmemcached、またはKey-Valueストアのようなキャッシュはどうですか? – demalexx

+0

それは方法ですが、私は追加の依存関係なしに方法を見つけることができると期待しました。 – Gregor

+0

これは小さな依存関係ですが、プロセス間通信を実装する際に遭遇する可能性があるいくつかの問題を解決します。 – demalexx

答えて

7

私はようやくまともな解決策を見つけた - コアPythonのマルチプロセッシング・マネージャー:

from multiprocessing import Manager 
manag = Manager() 
serviceLock = manag.Lock() 
serviceStatusDict = manag.dict() 

この辞書は、それが同期しています、すべてのプロセスからアクセスすることができますが、同時に、それをアクセスするときのように(ロックを使用する必要があります他のすべての共用メモリ実装)。

+0

こんにちはグレゴール、私は直面しているこの問題についてあなたの意見を持ってうれしいです: http://stackoverflow.com/questions/26088868/asynchronous-task-queue-processing-of-in-memory-data- djangoに入れて あなたのソリューションはそこに私の問題に適していると思いますか? ありがとうたくさん – cyberjoac

+0

こんにちはcyberjoac、これは一般的にはうまくいくかもしれませんが、DjangoとCeleryが同じプロセスグループに住んでいる場合は試してみる必要があります。それが動作するかどうか私に教えて、私は興味がある! – Gregor

+1

このマネージャをどこで初期化しますか? –

関連する問題