「eta」引数を使用してセロリでタスクをスケジュールするリマインダー タイプのアプリがあります。リマインダー オブジェクトのパラメーターが変更された場合 (リマインダーの時刻など)、以前に送信されたタスクを取り消し、新しいタスクをキューに入れます。
celeryd の再起動時に取り消されたタスクを追跡する良い方法があるかどうか疑問に思っていました。その場で celeryd プロセスをスケールアップ/ダウンできるようにしたいのですが、revoke コマンドが送信された後に開始された celeryd プロセスは引き続きそのタスクを実行するようです。
これを行う 1 つの方法は、取り消されたタスク ID のリストを保持することですが、この方法ではリストが勝手に大きくなります。このリストを整理するには、タスクがもう RabbitMQ キューにないことを保証する必要がありますが、これは不可能のようです。
また、各 celeryd ワーカーに共有 --statedb ファイルを使用してみましたが、stateb ファイルはワーカーの終了時にのみ更新されるため、達成したいことには適していないようです。
前もって感謝します!