2012-01-16 78 views
10

我使用Django,芹菜,有任务是这样的:任务状态和Django的芹菜

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' 

尽管任务执行得很好。

为什么会发生这种情况?

回答

10

芹菜使用什么版本?我注意到我对这个派对真的很迟,但是这会帮助未来的人。如果任务设置为ignore_result(默认情况下为最新版本),它将停留在PENDING,而不是进入SUCCESS。

在这里他们的文档,

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

您可以查看自己here,如果您有任何其他问题让我知道。

**也是另一个音符,即使你已经ignore_result设置为true,您可以随时手动更新状态,像这样,

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

的东西,自然的进度条中 - 芹菜的文档页面上还发现。

+0

谢谢你,先生! – 2013-11-21 11:57:10