/ / Celery / RabbitMQキューに残っているレガシータスクを削除する方法を教えてください。 - ジャンゴ、rabbitmq、セロリ、ジャンゴ - セロリ、セロリビート

Celery / RabbitMQキューに残っているレガシータスクを取り除くにはどうすればよいですか? - django、rabbitmq、セロリ、django-celery、celerybeat

私はDjango + Celery + RabbitMQを実行しています。 いくつかのタスク名を変更した後、Django Celery BeatのPeriodic tasksテーブルからこのキーを持つタスクを削除し、Celeryワーカーを再起動した後でも、「未登録タスク」KeyErrorsが発生し始めました。彼ら 持続する そのあとも --purgeオプションを指定して実行する.

どうすればそれらを取り除くことができますか?

回答:

回答№1は0

これらのタスクの最後をフラッシュするには、古いメソッドヘッダーを使用してそれらを再実装できますが、ロジックは使用できません。

たとえば、メソッドを削除した場合 original そして今エラーを得ている

[ERROR/MainProcess] Received unregistered task of type u"myapp.tasks.original"

ただ再作成 original メソッドを次のように使用します。

tasks.py

@shared_task
def original():
# keep legacy task header so that it is flushed out of queue
# FIXME: this will be removed in the next release
pass

各環境でこのバージョンを実行すると、残りのタスクはすべて処理されます(そして何もしません)。あなたがそれらをあなたから削除したことを確認してください 定期的なタスク そして、それらはもう呼び出されていません。その後、次回のデプロイの前にこのメソッドを削除することができます。この問題は繰り返し発生しません。

これはまだ回避策です、そしてそれができることが望ましいでしょう タスクを個別に確認して削除する.