セロリタスクが消え失せる時

By hientd, at: 2025年9月26日11:40

Estimated Reading Time: __READING_TIME__ minutes

When Celery Tasks Disappear into the Void
When Celery Tasks Disappear into the Void

 

はじめに

 

すべてのDjango開発者は経験しているでしょう。task.delay()を自信を持って呼び出すと…何も起こらないのです。エラーもログも結果も何もなく、ただ沈黙。まるでタスクがブラックホールに飲み込まれたかのようです。

 

「ゴーストタスク」 と出会う時が来ました。これは、Celeryが正しく設定または監視されていない場合に、虚空に漂い込むずる賢いバグです。

 

状況:見つからないタスク

 

開発者はsend_email_task.delay(user.id)でメール通知をスケジュールします。すべて問題ないように見えます。しかし、ユーザーはメールを受け取りません。ログには何も表示されません。監視も正常です。「ゴーストタスク」が発生しました。

 

「ゴーストタスク」👻のよくある原因

 

  1. ワーカーが実行されていない

     

    • Celeryワーカーが開始されていません(celery -A project worker -l info)。
       

    • タスクはキューに入れられているが、誰も聞いていない。
       

  2. ブローカーの誤設定

     

  3. タスクのインポートに関する問題

     

  4. 結果バックエンドがない

     

    • タスクは実際には実行されるが、バックエンドが設定されていないため、結果を見ることができない。

 

ゴーストのデバッグ

 

  • ワーカーを確認するps aux | grep celery
     

  • キューを検査するcelery -A project inspect active
     

  • ブローカーを監視する:Redis CLI(redis-cli monitor)またはRabbitMQダッシュボード。
     

  • ロギングを有効にする:タスクの流れを見るために、-l debugを付けてCeleryを実行する。

 

修正

 

# settings.py
CELERY_BROKER_URL = "redis://localhost:6379/0"
CELERY_RESULT_BACKEND = "redis://localhost:6379/0"


# tasks.py
from celery import shared_task

@shared_task
def send_email_task(user_id):
    print(f"Sending email to user {user_id}")

 

常に:

 

  • テスト前にワーカーを起動する
     

  • ブローカーが稼働していることを確認する
     

  • 監視を追加する(Flower、Sentry、またはPrometheus)

 

 

教訓

 

Celeryの沈黙は欺瞞的です。ワーカーが見つからないか、ブローカーの構成が間違っていると、警告なしにタスクが飲み込まれる可能性があります。常にキューを監視し、設定を検証し、再試行を追加してください。

Tag list:

Subscribe

Subscribe to our newsletter and never miss out lastest news.