私はかなり標準的な Django+Rabbitmq+Celery のセットアップを行い、1 つの Celery タスクと 5 つのワーカーを使用しています。
タスクは、同じ(少し単純化した) 大きなファイル (~100MB) を多数のリモート PC に非同期でアップロードします。
すべてのタスク/ワーカーがその大きなファイルを個別にメモリにロードするため、大量のメモリを使用することを犠牲にして、すべてが正常に機能しています。
私がやりたいことは、すべてのタスクにアクセスできるある種のキャッシュを用意することです。つまり、ファイルを一度だけロードします。locmem に基づく Django キャッシングは完璧ですが、ドキュメントにあるように、「各プロセスには独自のプライベート キャッシュ インスタンスがあります」とあり、すべてのワーカーがこのキャッシュにアクセスできる必要があります。
#2129820で説明されているように Celery シグナルで遊んでみましたが、それは私が必要とするものではありません。
だから問題は、Celeryで何かグローバルなものを定義できる方法はありますか(dictに基づくクラスのように、ファイルまたはsmthをロードできる場所です)。または、この状況で使用できる Django のトリックはありますか?
ありがとう。