前言
在web开发中,要给用户发送邮件,发送短信,都属于耗时的操作,会导致给用户的响应时间边长,这种情况的解决办法,给用户先返回一个响应,不要影响用户的使用,将这些耗时的操作,放在后台执行,例如新开一个进程,celery就是解决这个问题
celery组成部分
- worker :工人,执行任务的单元
- broker :消息中间件 即中间人 用来在服务和worker中传递消息 redis,RabbitMQ
- backend:用来存储消息以及celery执行结果
django+celery+redis
安装
pip install django-celery
pip install django-redis
pip install redis==2.10.6
启动redis服务
链接redis服务和关闭redis服务
Django的celery异步任务
和之前的开发相比,django-celery只是将任务发布出去,处理耗时操作
发送邮件,发送短信,爬虫,使用异步任务去实现,使得主进程不会阻塞,web服务只是负责发起任务和接收任务的结果,中间执行的过程交给异步任务处理。
安装注册
创建一个子应用
在项目主目录总创建一个文件(celery.py),用来编写celery的控制文件
编写任务文件 tasks.py
创建第一个任务
数据迁移
启动celery
python manage.py celery worker -- loglevel=info
创建带参数的任务
执行任务
celery的定时任务
配置settings中
启动定时任务
启动之前,确保redis,worker启动,再去启动定时任务
python celery定时任务的写法
timedelta
crontab
crontab(hour = "*/2") 每隔两小时执行一次
crontab(minute = 0,hour = "*/2") 每隔两小时的0分执行一次
crontab(minute = 0,hour = 0,day_of_month="2-31/2" ) 偶数天执行
crontab(minute = 0,hour = 0,day_of_month="1",month_of_year="5") 每年的五月1号执行