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 定时更新 ...
随机推荐
- 回顾Python装饰器
函数装饰器(function decorator)可以对函数进行“标注”,给函数提供更多的特性. 在理解装饰器之前需要理解闭包(closure).Python3.0 引入了保留关键字 nonlocal ...
- 初学者git的用法
初学者github的用法 1.在github上创建一个自己的工程 2.按着上面的要求执行你的命令行 3.将你的代码放到这个已经创建了.git的文件夹中,执行git add . 系统出现如下错误:war ...
- vmware中桥接模式,NAT模式,主机模式的区别
桥接模式 在桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机(主机和虚拟机处于对等地 位),它可以访问网内任何一台机器.在桥接模式下,我们往往需要为虚拟主机配置IP地址.子网掩 ...
- 编译rabbitmq c++客户端
rabbitmq官网地址 rabbitmq客户端 c++版本地址 rabbitmq客户端 c版本地址 下载c++版本:根据编译说明 Pre-requisites boost-1.47.0 or new ...
- 【Hadoop】CDH、Presto配置问题
1.hive.properties配置如下 connector.name=hive-hadoop2 hive.metastore.uri=thrift://node001.XXXX.com:9083 ...
- Pandas | 19 合并/连接
Pandas具有功能全面的高性能内存中连接操作,与SQL等关系数据库非常相似.Pandas提供了一个单独的merge()函数,作为DataFrame对象之间所有标准数据库连接操作的入口 - pd.me ...
- Pandas | 16 聚合
当有了滚动,扩展和ewm对象创建了以后,就有几种方法可以对数据执行聚合. DataFrame应用聚合 可以通过向整个DataFrame传递一个函数来进行聚合,或者通过标准的获取项目方法来选择一个列. ...
- Windbg Memory(内存)窗口的使用
在 WinDbg 中,可以查看和编辑内存,通过输入命令或通过使用内存窗口. 内存窗口的打开 通过菜单View-->Memory 通过快捷键Alt+5 通过工具栏 使用内存窗口 通过上面方式打开的 ...
- haproxy 配置文件详解 之 配置文件示例
此示例文件在haproxy1.8.20 测试没有问题: global log 127.0.0.1 local0 info maxconn user nobody group nobody daemon ...
- vs工具类SQLhelper参考
参考 https://www.cnblogs.com/liyangLife/p/5036636.html