Django的异步任务celery
在web开发中,要给用户发送邮件,发送短信,都属于耗时的操作,会导致给用户的响应时间变长,这种情况的解决方法,给用户先返回一个响应,不要影响用户的使用,将这些耗时的操作,放在后台执行,例如新开一个进程,celery就是解决这个问题。
- celery组成部分
- worker
-
工人,执行任务的单元
-
- broker
-
消息中间件 即中间人
-
用来在服务和worker中传递消息
-
redis RabbitMQ
-
- backend
-
用来储存消息以及celery执行结果
-
1.安装
-
django+celery+redis
pip install django-celery pip install django-redis pip install redis==2.10.6
2.启动 redis
在redis文件夹中启动终端,输入redis-server.exe redis.windows.conf
3.连接和关闭redis
在redis文件夹中开一个新的终端,先连接redis输入redis-cli.exe,则连接上redis,若要断开redis输入shutdown。
连接
断开
新的终端断开则原来的终端也会断开连接
4.配置文件
安装注册
若有自定义的时区则要改
创建子应用
在主应用中创建一个文件(celery.py),用来编写celery的控制文件
5.编写任务文件 tasks.py
数据迁移
python manage.py makegrations
python manage.py migrate
6.启动redis
在终端输入 python manage.py celery worker --loglevel=info
启动前记得终端连接redis
视图和路由都要设置一下
7.结果
创建带参数的任务
执行结果
celery 的定时任务
配置settings中
新开一个终端输入
执行后
新终端
旧终端
两个终端都会输出
定时任务写法
timedelta
crontab
crontab(hour="/2") 每隔两小时执行一次
crontab(minute = 0,hour="/2") 每隔两小时的0分执行一次
crontab(minute = 0,hour="*/2,8-12") 每隔两小时或者是8到12点执行
crontab(minute = 0,hour=0,day_of_month=“2-31/2”) 偶数天执行
crontab(minute = 0,hour=0,day_of_month=“1” month_of_year=“5”) 每年的5月1号
执行一次