8

私はかなり標準的な Django+Rabbitmq+Celery のセットアップを行い、1 つの Celery タスクと 5 つのワーカーを使用しています。

タスクは、同じ(少し単純化した) 大きなファイル (~100MB) を多数のリモート PC に非同期でアップロードします。

すべてのタスク/ワーカーがその大きなファイルを個別にメモリにロードするため、大量のメモリを使用することを犠牲にして、すべてが正常に機能しています。

私がやりたいことは、すべてのタスクにアクセスできるある種のキャッシュを用意することです。つまり、ファイルを一度だけロードします。locmem に基づく Django キャッシングは完璧ですが、ドキュメントにあるように、「各プロセスには独自のプライベート キャッシュ インスタンスがあります」とあり、すべてのワーカーがこのキャッシュにアクセスできる必要があります。

#2129820で説明されているように Celery シグナルで遊んでみましたが、それは私が必要とするものではありません。

だから問題は、Celeryで何かグローバルなものを定義できる方法はありますか(dictに基づくクラスのように、ファイルまたはsmthをロードできる場所です)。または、この状況で使用できる Django のトリックはありますか?

ありがとう。

4

3 に答える 3

2

ファイル全体をメモリにロードするのではなく、単にディスクからアップロードをストリーミングしないのはなぜですか?

于 2010-11-26T09:08:37.160 に答える
1

あなたが必要としているのは、django 用の memcached であると私には思えます。そうすれば、Celery の各タスクがアクセスできるようになります。

于 2010-03-23T14:53:59.707 に答える
0

この特定のタスクには、プロセスの代わりにスレッドを使用できるかもしれません。スレッドはすべて同じメモリを共有するため、メモリ内に必要なデータのコピーは 1 つだけですが、それでも並列実行が可能です。(これは、このタスクに Celery を使用しないことを意味します)

于 2010-10-27T17:37:25.973 に答える