Celery支持捕获任务的所有状态变化,通过设置on_message回调函数,
然后我写了以下代码,开始进行测试::
import time
from celery import Celery
from celery import states
app = Celery('tasks',
backend='amqp://agent:agent@172.18.231.134:5672',
broker='amqp://agent:agent@172.18.231.134:5672')
@app.task(bind=True)
def track_states(self, x, y):
time.sleep(5)
self.update_state(state='PROGRESS', meta={'progress': 50})
time.sleep(5)
self.update_state(state='PROGRESS', meta={'progress': 80})
time.sleep(3)
return 'hello world: %i' % (x + y)
def on_raw_message(body):
print('[{0}] {1}'.format(time.time(), body))
if __name__ == '__main__':
async_result = track_states.delay(2, 3)
result = async_result.get(on_message=on_raw_message, propagate=False)