簡體   English   中英

任務狀態和django-芹菜

[英]Task state and django-celery

我使用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 shell來運行任務:

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

但是,當我從地獄檢查任務狀態時,我總是得到PENDING:

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

即使任務執行得很好。

為什么會這樣?

你用的是什么版本的芹菜? 我注意到我參加這個派對的時間已經很晚了,但是如果這對未來的某個人有幫助的話。 如果任務設置為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})

進步欄的那種性質 - 也可以在celery的文檔頁面上找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM