官方文档
在Docker容器中配置和运行Django + Celery
docker-compose部署django+nginx+uwsgi+celery+redis+mysql
概要
Celery(芹菜队列)是一个分布式任务队列(消息队列服务),用于需要后台执行的异步任务,异步任务简单的理解就是耗时的操作任务
celery的应用情景:关于 celery 的应用场景问题
- 充当异步任务队列:当请求的任务需要花费一定时间才能完成时,如发送邮件,短信验证码,文件读写。但这个意思并不是花费时间的一定适合用celery解决,要具体问题具体分析
- 定时任务
Django中使用
这节的操作完全基于项目之后要在docker部署。。
pip install celery
1、celeryconf.py
文件作用大概是告诉django我使用了celery,是celery的配置文件。里面设置了celery的broker和backend的链接,还有时区等等
不一定要叫这个名字,有放项目文件夹下的也有放具体使用到的app文件夹下的
2、tasks.py
使用celery的装饰器,装饰需要被celery异步执行的函数
3、__init__.py
导入celery模块,导入task模块.指明序号1的配置文件位置,并在里面申明app用于task文件里装饰函数的使用
不太确定这段代码放的位置。。有放在app文件夹下migrations文件夹的__init__.py文件中的
4、在django需要使用的地方导入tasks模块,使用里面的函数
5、先在终端中启动workercelery worker -A celery_demo -l INFO
,再启动程序
Docker中部署
首先说明,celery在执行任务时需要通过一个消息中间件(Broker)来接收和发送任务消息,以及(Backend)存储任务结果, 一般使用rabbitMQ或者Redis。这段话意思是,docker部署一定还要加一个容器放rabbitMQ或者Redis,单独只有一个celery是跑不起来的。
docker-compose.yml
文件中:
command:celery -A web worker -l info
或者
celery worker -A myproject.celeryconf -Q default -n default@%h
depend on:broker和backend使用的组件