Celery在Django中的使用介绍
Celery在Django中的使用介绍
Celery简介
celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必须工具。
它是一个专注于实时处理的任务队列,同时也支持任务调度。
何为任务队列
任务队列:是一种在线程和机器间分发任务的机制。
celery的三大组成部分
worker
任务执行单元-->Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。
broker(存tasks的仓库)
消息中间件--> Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等
backend (存results的仓库)
ask result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等
使用场景
- 异步任务:将耗时操作任务提交给celery去异步执行,比如发送短信、邮件,消息推送、音视频处理等。
- 定时任务:定时执行某件事情,比如每天数据统计
基本命令
# 1. 启动celery服务:
# 非windows:
# 指令:celery worker -A celery_task(celery项目文件) -l info
# windows: 需要先下载eventlet模块,pip install eventlet
# 指令: celery worker -A celery_task -l info -P eventlet
# 2. 添加任务:手动添加,需要自定义添加任务脚本;自动添加任务,在celery.py中配置
# 3. 获取结构:手动获取,需要自定义任务脚本
celery在Django项目中的使用
celery目录结构
project
|---celery_task
|---celery.py # celery连接和相关配置,且名字必须是celery.py,如果要自动添加任务,那么相 关配置也在celery.py里配置;
|---tasks.py # 所有任务函数
|---add_task.py # 手动添加任务:立即任务,延时任务,定时任务;
|---get_result.py # 获取结果
后面两个文件可以不用添加,看需求来。
使用
celery.py
from celery import Celery
# 导入时间相关包,用法看下面
from datetime import timedelta
from celery.schedules import crontab
# 因为需要调用Django项目中的models,所有需要添加Django环境
import os,django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bookapi.settings.dev')
django.setup()
# 添加任务的仓库,这里使用了Redis
broker = "redis://127.0.0.1:6379/11"
# 接收处理结果的仓库
backend = "redis://127.0.0.1:6379/12"
# 指定需要处理的任务
include = ['celery_task.tasks']
app = Celery(broker=broker,backend=backend,include=include)
# 配置任务时区
app.conf.timezone = 'Asia/Shanghai'
app.conf.enable_utc = False
# 配置定时任务
app.conf.beat_schedule = {
'recommend-task': {
'task': 'celery_task.tasks.recommend_num',
# 'schedule': timedelta(seconds=20),
'schedule': crontab(hour=24),
'args': ()
},
'monthly-task': {
'task': 'celery_task.tasks.monthly_num',
# 'schedule': timedelta(seconds=60),
'schedule': crontab(day_of_month=1,hour=0),
'args': ()
}
}
tasks.py
from .celery import app
from bookapi.apps.user import models
@app.task
def recommend_num():
user_list = models.User.objects.all()
# print(user_list) ## <QuerySet [<User: admin>, <User: 18700022899>]>
for user in user_list:
models.User.objects.filter(username=user.username).update(recommend_nums=3)
@app.task
def monthly_num():
user_list = models.User.objects.all()
# print(user_list) ## <QuerySet [<User: admin>, <User: 18700022899>]>
for user in user_list:
models.User.objects.filter(username=user.username).update(monthly_nums=2)
Celery在Django中的使用介绍的更多相关文章
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- celery在Django中的集成使用
继上回安装和使用Redis之后,看看如何在Django中使用Celery.Celery是Python开发分布式任务列队的处理库.可以异步分布式地异步处理任务,也可定时执行任务等等.通常我们可以在Dja ...
- django中的ORM介绍和字段及字段参数
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- Django中的ORM介绍,字段以及字段的参数。
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- celery在Django中的应用
这里不解释celery,如果不清楚可以参考下面链接: http://docs.celeryproject.org/en/latest/getting-started/introduction.html ...
- Django 中得ORM介绍和字段及字段参数
ORM 介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说 ORM 是通过使用 ...
- Django 中使用 Celery
起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 ...
- Django中Celery的实现介绍(一)
Django中Celery的实现 Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Cele ...
- celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决
今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...
随机推荐
- U-Boot的常用命令详解
U-Boot还提供了更加详细的命令帮助,通过help命令还可以查看每个命令的参数说明.由于开发过程的需要,有必要先把U-Boot命令的用法弄清楚.接下来,根据每一条命令的帮助信息,解释一下这些命令的功 ...
- Slf4j 打日志的问题 Exception 没有堆栈信息
Slf4j 打日志的问题 Exception 没有堆栈信息 发现线上环境有的Exception堆栈信息没打出来,只有异常信息没有堆栈信息,难以定位 一般情况下日志这么打 log.info(" ...
- SDN Reading Notes
网络操作编程语言:Frenetic QoS策略实施框架:PolicyCop
- VS 代码过长自动换行
然后就需要设置自动换行.在VS上面的菜单栏中,选择 工具=>选项,出现选项对话框. 在对话框中,展开“文本编辑器”,然后选中“C#”,勾选右边的“自动换行“. 点击确定按钮.这样就可以看 ...
- 【Linux】bat文件如何执行
绝对路径,"/home/myDir/xxx.bat" OR 所在的目录,:"./xxx.bat".
- 【java异常】 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.emptech.db.demo.mapper.master.MOmQuotaTBMapper.findOmQuotaTB
<mapper namespace="com.emptech.db.demo.mapper.master.MOmQuotaTBMapper"> public inter ...
- 模拟赛 T1 费马小定理+质因数分解+exgcd
求:$a^{bx \%p}\equiv 1(\mod p)$ 的一个可行的 $x$. 根据欧拉定理,我们知道 $a^{\phi(p)}\equiv 1(\mod p)$ 而在 $a^x\equiv 1 ...
- graalvm native image 试用
graalvm 提供的native 模式,可以加速应用的启动,不同可以让应用不再依赖jvm 运行时环境,但是 也有一些限制 参考 https://github.com/oracle/graal/blo ...
- Qt绘制中国象棋棋盘
这里主要用的是#include <QPainter>里面的paintEvent void Board::paintEvent(QPaintEvent*) { QPainter painte ...
- centos7 安装 mysql5.7.25
一.检查是否安装了mysql和mariadb,若已经安装就需要卸载. [root@localhost ~]# rpm -qa|grep mariadb // 查询出来已安装的mariadb [root ...