我使用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()从celery日志中,我可以看到该任务已执行:
[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'即使任务被很好地执行。
为什么会发生这种情况?
发布于 2012-11-06 07:11:26
你用的是什么版本的芹菜?我注意到我来这个聚会真的很晚,但以防万一这对将来有人有帮助。如果任务设置为ignore_result (在最新版本中是默认的),它将停留在PENDING状态,不会成功。
他们的文档在这里,
@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})进度条特性--也可以在celery的文档页面中找到。
https://stackoverflow.com/questions/8876863
复制相似问题