celery快速入门

一、什么是Celery?
  • Celery是一个强大的分布式任务队列,可以在不同主机上运行程序。一般用来实现异步任务和定时任务。

Image.png

这里面包括几个部分:
  • 任务模块Task
    • 异步任务:在业务逻辑中被处罚并发送给任务队列
    • 定时任务:通过Celery Beat周期性发送人物到任务队列
  • 消息中间件Broker
    • 这个是任务调度队列:接受生产者发来的任务,将任务存入队列
    • 官方支持比较好的是RabbitMQ和Redis
  • 任务执行单元Worker
    • Worker用来处理任务的模块,通过监控消息队列,获取队列中的任务
  • 任务结果存储Backend
    • 用来存储任务的执行结果
二、第一个Celery例子
一般来说实现异步任务有三个步骤
  • 创建一个Celery实例
  • 启动Celery Worker
  • 应用程序调用异步任务
1、创建一个Celery实例
  • 创建了一个celery实例app,名字叫做my_task
  • 指定broker和backend使用redis,这里是通过URL的形式定义的
  • 定义了一个函数add(),并用装饰器@app.task定义为可被celery调度的任务

2、启动Celery Worker

  • 这里-A指定了这个task.py文件的位置,然后celery会在这个task.py中根据刚才修饰器@app.task找到Celery的对象实例
  • 这里-l info表示指定的日志级别

Image [2].png

3、应用程序调用异步任务
运行下面的client.py文件
会现在控制台看到hello world的输出,然后在celery启动的窗口我们可以看到结果
Image [3].png
在redis中我们可以看到定义的backend中存储了结果
Image [4].png
三、多个任务的Celery异步例子
1、目录结构
通过上面的例子我们看到只有一个任务的时候,把Celery实例写到文件里。
如果有多个任务的话,我们一般使用配置文件来配置broker和backend

2、一个实例

3、启动Celery Worker

Image [5].png

4、执行client.py
Image [6].png
5、关于delay和apply_async
  • delay()和apply_async()都可以用来调用任务。
  • delay()方法中封装了apply_async(),只不过apply_async()支持更多的参数。