0

私は2つの異なるdjangoプロジェクトを持ってprojAおりprojB、それぞれが別々のキューで実行されている独自のセロリデーモンを持っていますが、同じvhost、projAにはタスクがtaskAあり、projBにはタスクがあります。たとえば、内部taskBから実行しようとしていますtaskBtaskA

@task(routing_key='taskA')
def taskA(event_id):
    # do some work , then call taskB and wait for result
    result = send_task('taskB',routing_key='taskB')
    res = result.get(timeout=20)

taskB が 1 秒以内に終了したことを projB のログで確認できますが、taskA は結果を待ち続け、20 秒後にタイムアウトします

バックエンドにはrabbitmqがあります。

4

1 に答える 1

1

結果のバックエンドを設定すると問題が修正されました

CELERY_RESULT_BACKEND = "amqp"
CELERY_AMQP_TASK_RESULT_EXPIRES = 1000 

IMO 結果のバックエンドが設定されていない場合、result.get はエラーをスローするか、少なくとも警告をログに記録する必要があります

ここで説明されているように、セロリ 2.3 はエラーをスローしますがhttps://github.com/ask/django-celery/issues/66

于 2011-08-22T21:09:06.910 に答える