タスククックブック—Pythonドキュメント
提供:Dev Guides
Celery/docs/latest/tutorials/task-cookbook
タスククックブック
タスクが一度に1つだけ実行されるようにする
これは、ロックを使用して実行できます。
この例では、キャッシュフレームワークを使用して、すべてのワーカーがアクセスできるロックを設定します。
これは、 djangofeeds と呼ばれる架空のRSSフィードインポーターの一部です。 このタスクは、フィードURLを単一の引数として受け取り、そのフィードを Feed と呼ばれるDjangoモデルにインポートします。 フィードURLのMD5チェックサムで構成されるキャッシュキーを設定することにより、2人以上のワーカーが同じフィードを同時にインポートできないようにします。
予期しないことが起こった場合に備えて、キャッシュキーはしばらくすると期限切れになり、何かが常に発生します…
このため、タスクの実行時間はタイムアウトを超えてはなりません。
ノート
これが正しく機能するためには、.add
操作がアトミックであるキャッシュバックエンドを使用する必要があります。 memcached
はこの目的でうまく機能することが知られています。