"eta"引数を使用してセラーでタスクをスケジュールするリマインダータイプのアプリケーションがあります。リマインダーオブジェクト内のパラメータが変更された場合(例えばリマインダーの時間)、以前に送信されたタスクを取り消し、新しいタスクをキューに入れる。複数のcelerydプロセス間で失効したタスクを追跡する方法
Celerydの再起動時に取り消されたタスクを追跡する良い方法があるのだろうかと思っていました。私はその場でcelerydプロセスを上下に拡大する機能を持っていたいと思います。取り消しコマンドを送信した後に開始されたcelerydプロセスはそのタスクを実行するようです。
これを行う1つの方法は、取り消されたタスクIDのリストを保持することですが、この方法ではリストが任意に増加します。このリストをプルーニングするには、タスクがもはやRabbitMQキューに存在しないことが保証されている必要があります。
私はまた、各celerydワーカーに対して--statedbファイルを共有しようとしましたが、指定されたファイルはワーカーの終了時にのみ更新されるため、達成したいものには適していないようです。
ありがとうございます!
:私はあなたがこのために
worker_ready
信号を使用することができると思います以前に取り消されたタスクを実行しないでください。 –私はあなたが既に何らかの種類のデータベースモデルを設定していると仮定していますが、必要に応じてタスクを取り消すことができるように、タスクIDも保存していますか?もしそうなら、 'completed'フラグをこのモデルに追加することができます。 –
私はちょうど思い付きました。取り消しタスクIDのリストを保持し、celerydプロセスがスピンアップまたは再起動されるたびに、スクリプトはリスト全体をループして取り消しコマンドを再送します。その方法では、最後のスクリプトの実行以降に取り消されたタスクIDを保持するだけです。あなたはこの実装の欠陥を見ることができますか? –