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号
执行一次
本文介绍了如何在Django项目中使用Celery进行异步任务处理,包括安装Celery和Redis、配置文件设置、任务文件编写、启动Redis以及定时任务的配置和执行。通过Celery,可以有效提升用户体验,避免耗时操作导致的响应延迟。
3103

被折叠的 条评论
为什么被折叠?



