Celery(异步任务队列)
1、Celery三个概念
1)任务发出者:任务发出者就是发出要执行任务的函数;
2)中间人(broker):任务队列;建议以下两种:RabbitMQ,redis;
3)任务执行者(worker):任务就是进程、协程(不支持线程)。
其执行过程为,任务发出者发出任务至队列,队列的特点即对队列中的任务进行排队(同步),任务执行者监听任务队列,取出任务执行。
2、celery特点
celery中的任务者,中间人,和任务执行者可以在不同电脑上,因为任务发出者,任务执行者通过中间人进行通讯。
3、celery使用
1)定义任务函数;
2)启动worker;
- 发送任务;
4、Demo
创建以下目录

目录
celery_tasks/main.py
from celery import Celery
# 创建一个Celery对象
# celery_app = Celery('celery_tasks', broker='中间人地址')
celery_app = Celery('celery_tasks')
# 加载配置
celery_app.config_from_object('celery_tasks.config')
# 让celery自动发现任务
# autodiscover_tasks会自动搜寻路径下的文件,路径目录命名随意,但是存放任务的文件一定命名为tasks.py才会自动发现
celery_app.autodiscover_tasks(['celery_tasks.tasks'])
celery_tasks/config.py
from celery_tasks.main import celery_app
# 定义任务的函数
# 用celery_app装饰函数使其成为celery任务,name为任务名字
@celery_app.task(name='my_celery_task')
def task1(a, b):
print('任务函数执行,a:%s,b:%s' % (a, b))
celery_tasks/tasks/tasks.py
from celery_tasks.main import celery_app
# 定义任务的函数
# 用celery_app装饰函数使其成为celery任务,name为任务名字
@celery_app.task(name='my_celery_task')
def task1(a, b):
print('任务函数执行,a:%s,b:%sce' % (a, b))
执行方法:
启动worker,此处通过命令行启动:
celery -A celery_tasks.main worker -l info
1)命令行中,-l info为设置日志级别;
2)- ** ---------- .> transport: redis://127.0.0.1:6379/15为设置的中间人地址;
3)- *** --- * --- .> concurrency: 2 (prefork)
preforker个数默认为CPU核数。
4)[tasks]
. my_celery_task是注册过的任务。

启动worker
启动任务函数

启动task1
worker收到任务函数并执行

worker收到任务函数并执行