任务状态和 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()
从 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
但是,当我从地狱检查任务状态时,我总是得到 PENDING:
>>> r = tasks.TestTask().delay()
>>> r
<AsyncResult: e2360811-d003-45bc-bbf8-c6fd5692c32c>
>>> r.state
'PENDING'
>>> r.state
'PENDING'
>>> r.state
'PENDING'
>>> r.state
'PENDING'
即使任务执行得很好。
为什么会出现这种情况?
I use django-celery and have task like this:
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")
I use django shell to run task:
python manage.py shell
r = tasks.TestTask().delay()
From celery log I see that task is executed:
[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
However when I check task state from hell I always got PENDING:
>>> r = tasks.TestTask().delay()
>>> r
<AsyncResult: e2360811-d003-45bc-bbf8-c6fd5692c32c>
>>> r.state
'PENDING'
>>> r.state
'PENDING'
>>> r.state
'PENDING'
>>> r.state
'PENDING'
even though task is well executed.
Why this happens?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你使用什么版本的芹菜?我注意到我参加这个聚会真的迟到了,但以防万一这对将来的人有帮助。如果任务设置为ignore_result(最新版本中默认为),它将停留在PENDING状态,不会进入SUCCESS状态。
他们的文档在这里,
您可以在此处亲自查看,如果您有任何其他问题请告诉我。
** 另请注意,即使您将ignore_result 设置为 true,您始终可以像这样手动更新状态,
进度条的这种性质 - 也可以在 celery 的文档页面上找到。
What version of celery are you using? I notice I'm really late to this party but in case this helps someone in the future. If the task is set to ignore_result (which it is by default in the latest version) it will stay at PENDING and not go to SUCCESS.
Their documentation here,
You can view it yourself here, if you have any other questions let me know.
** Also another note, even if you have ignore_result set to true you can always manually update the state like so,
Something of that nature for progress bars -- also found on celery's documentation page.