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中的使用介绍的更多相关文章

  1. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  2. celery在Django中的集成使用

    继上回安装和使用Redis之后,看看如何在Django中使用Celery.Celery是Python开发分布式任务列队的处理库.可以异步分布式地异步处理任务,也可定时执行任务等等.通常我们可以在Dja ...

  3. django中的ORM介绍和字段及字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  4. Django中的ORM介绍,字段以及字段的参数。

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  5. celery在Django中的应用

    这里不解释celery,如果不清楚可以参考下面链接: http://docs.celeryproject.org/en/latest/getting-started/introduction.html ...

  6. Django 中得ORM介绍和字段及字段参数

    ORM 介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说 ORM 是通过使用 ...

  7. Django 中使用 Celery

    起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 ...

  8. Django中Celery的实现介绍(一)

    Django中Celery的实现 Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Cele ...

  9. celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决

    今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...

随机推荐

  1. SSH端口转发之本地转发

    一.案例环境: 3台RHEL6.5 64虚拟机(分别为:HostA.HostB.HostC) IP地址: HostA:192.168.100.101 HostB:192.168.100.102 Hos ...

  2. 1. 观察者模式总结(C++)

    1. 介绍 观察者模式:定义了一种"一对多"的依赖关系,让多个观察者对象同时监听一个对象的改变,即当该对象的状态发现改变时,会通知所有它依赖的观察者对象.观察者模式属于行为模式. ...

  3. bloginfo()用法小结|wordpress函数

    bloginfo()显示关于您的wordpress站点的信息,主要是从您的用户配置文件和WordPress管理屏幕的一般设置中收集的信息.它可以在模板文件的任何地方使用.这总是将结果打印到浏览器.如果 ...

  4. NOIP 2002 选数

    洛谷 P1036 选数 洛谷传送门 JDOJ 1297: [NOIP2002]选数 T2 JDOJ传送门 Description ​ 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k< ...

  5. IIS 报错 Cannot open database "test4" requested by the login. The login failed. Login failed for user 'IIS APPPOOL\test1'.

    报错: Cannot open database "test4" requested by the login. The login failed. Login failed fo ...

  6. HBase快照迁移数据失败原因及解决办法

    目录 目录 1 1. 背景 1 2. 环境 1 3. 执行语句 1 4. 问题描述 1 5. 错误信息 2 6. 问题原因 3 7. 解决办法 4 1. 背景 机房裁撤,需将源HBase集群的数据迁移 ...

  7. 洛谷p1747好奇怪的游戏题解

    题目 永远不要怀疑劳动人民的智慧! 把快读里最后的return直接返回零的 我已经不是第一次写错了! 我要是再写错我就****** 主要是逆向思维,把从两个点往(1, 1)走想成从(1, 1)点往这两 ...

  8. 【树形DP】【P3177】[HAOI2015] 树上染色

    Description 给定一棵 \(n\) 个点的带权树,要求选 \(k\) 个点染成黑色,剩下染成白色,最大化两两同色点之间的距离和. Limitations \(0 \leq k \leq n ...

  9. 第02组 Alpha冲刺(1/4)

    队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:进行组员分工 GitHub签入记录 接下来的计划:构思游戏实现 还剩下哪些任务:敲代码 燃尽图 遇到的困难:任务分配的不及时,导致很 ...

  10. json for modern c++(nlohmann json)使用小计

    前言 一开始使用jsoncpp,但是jsoncpp已经不更新了,nlohmann还在更新,并且jsoncpp做过一次大的版本升级,导致api不兼容,以前使用过的工程代码不能很好的升级到新的版本,并且j ...