秦悦明的运维笔记

使用celery做异步任务

1.选择broker

可以选择的broker很多,一般选择rabbitmq。本身就是消息中间件。rabbitmq的安装略。

2.安装celery

1
$ pip install celery

3.创建tasks

创建tasks.py

1
2
3
4
5
6
7
from celery import Celery
app = Celery('tasks', broker='amqp://guest@localhost//')
@app.task
def add(x, y):
return x + y

4.运行celery worker

1
$ celery -A tasks worker --loglevel=info

5.调用tasks

很简单,import进来,然后调用delay函数即可。

1
add.delay(1,2)

celery worker进程会收到这个消息并执行他

1
2
Received task: proj.tasks.add[9e9ee3e8-1350-4858-9fbb-0fd62779c3e1]
Task proj.tasks.add[9e9ee3e8-1350-4858-9fbb-0fd62779c3e1] succeeded in 0.00637572002597s: 3

注意,这里并没有记录结果。

6.保存结果

celery里面做法也很简单,初始化app的时候加个backend就可以了。这里已redis为例:

1
app = Celery('tasks', backend='redis://localhost', broker='amqp://')
1
2
result = add.delay(4, 4)
ret = result.get(timeout=1)