11

私はdjango-celeryを使用しており、次のようなタスクがあります:

class TestTask(Task):
    name = "enabler.test_task"

    def run(self, **kw):
        debug_log("begin test task")
        time.sleep(5)
        debug_log("end test task")

    def on_success(self, retval, task_id, args, kwargs):
        debug_log("on success")

    def on_failure(self, retval, task_id, args, kwargs):
        debug_log("on failure")

django シェルを使用してタスクを実行します。

python manage.py shell

r = tasks.TestTask().delay()

セロリログから、タスクが実行されていることがわかります:

[2012-01-16 08:13:29,362: INFO/MainProcess] Got task from broker: enabler.test_task[e2360811-d003-45bc-bbf8-c6fd5692c32c]
[2012-01-16 08:13:29,390: DEBUG/PoolWorker-3] begin test task
[2012-01-16 08:13:34,389: DEBUG/PoolWorker-3] end test task
[2012-01-16 08:13:34,390: DEBUG/PoolWorker-3] on success
[2012-01-16 08:13:34,390: INFO/MainProcess] Task enabler.test_task[e2360811-d003-45bc-bbf8-c6fd5692c32c] succeeded in 5.00004410744s: None

ただし、地獄からタスクの状態を確認すると、常に保留中になりました。

>>> r = tasks.TestTask().delay()
>>> r
<AsyncResult: e2360811-d003-45bc-bbf8-c6fd5692c32c>
>>> r.state
'PENDING'
>>> r.state
'PENDING'
>>> r.state
'PENDING'
>>> r.state
'PENDING'

たとえタスクがうまく実行されたとしても。

なぜこれが起こるのですか?

4

1 に答える 1

12

どのバージョンのセロリを使用していますか? 私はこのパーティーに本当に遅れていることに気づきましたが、これが将来誰かを助ける場合に備えて. タスクが ignore_result に設定されている場合 (最新バージョンではデフォルトで設定されています)、タスクは PENDING のままになり、SUCCESS にはなりません。

彼らのドキュメントはこちら、

@celery.task(ignore_result=True)
def mytask(...)
    something()

ここで自分で見ることができます。他に質問がある場合はお知らせください。

** また、ignore_result を true に設定していても、いつでも状態を手動で更新できます。

from celery import current_task
current_task.update_state(state='PROGRESS', meta={'description': 'Doing some task', 'current': 59, 'tota': 73})

プログレスバーの性質の何か - セロリのドキュメントページにもあります。

于 2012-11-05T23:11:25.737 に答える