【发布时间】:2015-03-05 05:29:10
【问题描述】:
我在 Celery + RabbitMQ 结果后端使用custom states 实现了长任务的进度反馈。
但是调用者无法像我预期的那样检索最新的进度状态。在下面的代码中,result.info['step']总是返回0,然后任务将以“result=42”结束。
# tasks.py -- celery worker
from celery import Celery
app = Celery('tasks', backend='amqp', broker='amqp://guest@localhost//')
@app.task
def long_task():
for i in range(0, 10):
timer.sleep(10) # some work
self.update_state(state='PROGRESS', meta={'step': i})
return 42
# caller.py
from tasks import long_task
result = long_task.delay()
while not (result.successful() or result.failed()):
try:
result.get(timeout=1)
except celery.exceptions.TimeoutError:
if result.state == 'PROGRESS':
print("progress={}".format(result.info['step']))
print("result={}".format(result.get()))
Python 3.4.1 / Celery 3.1.17 / RabbitMQ 3.4.4
【问题讨论】: