Celery 是 Distributed Task Queue 分布式任务队列。
不太理解异步任务队列,看到有人说:
分布式异步任务队列的作用就是把 python 代码放到不同的环境上面去跑, 核心难题就是如何序列化和反序列化函数, 函数都有复杂的依赖关系,调用系统函数,或者用户自定义函数, 这些依赖都要一起序列化传输。暂时先这么理解
Celery 基本工作就是管理分配任务到不同的服务器上,并且取得相应的结果,至于服务器之间是如何通信的,Celery 并不能解决这个问题。
Celery 分为三部分:消息中间件 broker,任务执行单元 worker 和 任务结果存储。
broker:消息传输的中间件。每当应用程序调用 celery 的异步任务时,会向 broker 传递消息。然后 worker 会取到消息。就是一个消息队列。broker 选择方案:RabbitMQ,Redis
backend:存储消息以及 celery 执行的一些消息和结果。有数据库和 redis 可选。
直接 pip install celery
即可安装。
一般目录格式:
project/__init__.py
/celery.py
/tasks.py
# project.celery.py
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('proj',
broker='redis://',
backend='redis://',
include=['project.tasks'])
# Optional configuration, see the application user guide.
app.conf.update(
result_expires=3600,
)
if __name__ == '__main__':
app.start()
# project/tasks.py
from __future__ import absolute_import, unicode_literals
from .celery import app
@app.task
def add(x, y):
return x + y
celery 启动 worker
celery -A 项目名称 worker -l info/debug
配置多个 worker
celery multi start w1 -A poject -l info
celery 启动定时任务 beat
celery -A 项目名称.任务文件 beat -l info/debug
Django 结合 celery,可以使用 pip install django-celery
注:在 CentOs 中,我的 Python3 环境是编译源代码安装的,在
pip3 install celery
之后,bash 总说找不到命令 celery。但是 Python2 环境下可以安装成功。很迷。。。