使用celery完成异步任务
背景
有时我们需要一些定时任务,比如,30分钟后,修改订单状态为不可支付,并恢复库存,此时,要实现这种功能需要单独一个程序,使其不断查询时间是否到期。显然这种方式会浪费大量资源,所以我们引入一个定时任务的框架celery。
celery简介
celery 是一个高效的异步任务框架,可以立刻执行异步操作,或者定时执行。也可以同步等待运行结果。
安装运行
要求:
redis(也可使用rabbitMQ)
celery:
pip install -U Celery
代码
- 准备任务文件task.py
from celery import Celery
app = Celery('test_celery', include=['task'])
#app.config_from_object('celeryconfig')
app.conf.broker_url = 'redis://:P@ssword1!@localhost:6379/0'
@app.task
def add(x, y):
return x+y
if __name__ == '__main__':
app.start()
-
运行celery worker 服务:
celery -A task worker --loglevel=info
-
ipython中启动任务
In [1]: from task import add
In [2]: add.delay(1,2). # 立刻执行异步操作
Out[2]: <AsyncResult: 96ebcaf3-5439-4f2d-8408-1a370772d84d>
In [3]: add.apply_async((1,2), countdown=10) # 10s钟后执行操作,
Out[3]: <AsyncResult: 55a59b9e-59b0-466a-bf96-e160bf2a2680>