celery笔记四之在Django中使用celery
本文首发于公众号:Hunter后端
原文链接:celery笔记四之在Django中使用celery
这一篇笔记介绍一下如何在 Django 系统中使用 celery。
如果是想纯粹使用 celery,这一篇笔记可以略过。
本篇笔记目录如下:
- 文件配置
- task 定义
- 运行 worker
1、文件配置
我们这里使用前面的创建的 hunter Django 系统。
我们需要在 settings.py 所在的文件夹下配置如下几个文件:
hunter/hunter/
/__init__.py
/celery.py
/settings.py
其中,celery.py 文件是我们需要新建的,其他的两个我们需要新增一点配置项。
以下是 celery.py 文件内容:
# hunter/hunter/celery.py
import os
from celery import Celery
# 为 celery 程序设置默认的 Django 配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'hunter.settings')
app = Celery('hunter')
# 表示从 Django 的配置中加载 celery 的配置,namespace='CELERY' 表示 celery 的配置必须是以 'CELERY' 为前缀
app.config_from_object('django.conf:settings', namespace='CELERY')
app.conf.update(
task_ignore_result=True
)
# 我们需要设置的定时任务 或者 延时任务都可以在对应的 application 下定义,task 的定义我们在下面介绍
# 然后通过下面的命令自动发现对应的任务
# 比如想要在 blog 下设置一个延时任务,可以创建 blog/tasks.py,然后 celery 就可以自己发现对应的任务
app.autodiscover_tasks()
在 Django 的 celery.py 里,不一样的是,os.environ.setdefault() 函数设置了一个 Django 的配置
对 Celery() 实例化的时候,用到的是 Django 的系统名称 hunter
而这里使用到的 config_from_object() 用到的值是 'django.conf:settings',namespace 的值是 'CELERY',表示在 settings.py 中所有 CELERY 开头的值都可以被捕捉到并作为 celery 的配置项,这个我们等下介绍。
最后面有一个 app.autodiscover_tasks() 表示Django 系统将会自动获取 Django 系统下各个 application 的 tasks.py 的 task。
以上就是一个最基本的使用模板。
settings.py
在 settings.py 中的配置如下:
CELERY_ENABLE_UTC = False
CELERY_TIMEZONE = "Asia/Shanghai"
CELERY_BROKER_URL = "redis://localhost/0"
CELERY_RESULT_BACKEND = "redis://localhost/1"
其中,所有的关于 celery 的配置都需要加上 CELERY_ 的前缀,参数值的定义和之前 celeryconfig.py 中的定义方式是一致的。
还有很多其他的配置项对应值,详见下面的链接:celery配置项
除此之外,为了确保 celery 的 app 在 Django 运行的时候被加载,我们还需要在 hunter/hunter/init.py 中引入 celery_app。
# hunter/hunter/__init__.py
from .celery import app as celery_app
__all__ = ('celery_app',)
这样,每个 application 下的 tasks.py 中被 @shared_task 修饰的延时或定时任务就可以使用了。
2、task 定义
假设我们还是沿用之前的 application,命名为 blog,我们在这个文件夹下创建一个 tasks.py,内容如下:
# blog/tasks.py
from celery import shared_task
@shared_task
def test_add(x, y):
return x + y
在 Django 的 tasks 里我们会把 task 都写在可重复使用的 app 下,比如 blog,但是这些 app 不能依赖于项目本身,所以不能直接引入这些app实例
@shared_task 装饰器可以让你在不需要任何具体的 app 实例的情况下创建 task
以上是官方文档给出的一段介绍,u1s1,我不太理解这段话的含义,但是我们照做就行了,就是在 Django 的 task 中,我们使用 @shared_task 来修饰那些 task 即可。
就此,我们将 celery 融入 Django 的操作就完成啦!
3、运行 worker
我们还是需要单独将 worker 运行起来才可以调用延时任务
我们在 Django 系统的根目录下,也就是 hunter/ 下,执行:
celery -A hunter worker -l INFO
然后新开一个 shell,在 Django 系统的根目录下进入 Django 的 shell,也就是使用 python3 manage.py shell,然后调用 task:
from blog.tasks import test_add
test_add.delay(1, 2)
关于 celery 与 Django 的融合,还有一些其他操作,比如将 task 运行的 result 写入 Django 的表,使用 Django 的表来设置定义任务等,这个我们后面再单开笔记来详细介绍。
如果想获取更多后端相关文章,可扫码关注阅读:

celery笔记四之在Django中使用celery的更多相关文章
- Django中使用Celery实现定时任务(用djcelery)
一.引言 Django是python语言下的一个比较热门的Web框架,越来越多的企业和开发者使用Django实现自己的Web服务器.在Web服务器开发过程中,有时候我们不仅仅是要实现Web服务器端和用 ...
- Python—在Django中使用Celery
一.Django中的请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下: http请求发起 经过中间件 http handling(request解析) ur ...
- celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决
今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...
- Django 中使用 Celery
起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- Django中使用Celery
一.前言 Celery是一个基于python开发的分布式任务队列,如果不了解请阅读笔者上一篇博文Celery入门与进阶,而做python WEB开发最为流行的框架莫属Django,但是Django的请 ...
- Django中使用Celery,定制应用程序中定义的shared_task未在定期任务管理页面的注册任务中显示
解决办法: 在项目 proj/proj/celery.py文件中,看到下面这行配置: celery_app.config_from_object('django.conf:settings', nam ...
- Celery简介以及Django中使用celery
目录 Celery简介 消息中间件 任务执行单元 任务结果存储 使用场景 Celery的安装和配置 Celery执行异步任务 基本使用 延时任务 定时任务 异步处理Django任务 案例: Celer ...
- django中使用celery,模拟商品秒杀。
Celery是Python开发的简单.灵活可靠的.处理大量消息的分布式任务调度模块 安装: pip install celery # 安装celery库 pip install redis # cel ...
随机推荐
- Thinkpad T14升级Windows11ver22h2失败问题解决小记
背景 手头的ThinkPad在近一年的时间里每次升级Windows 11的22h2版本每次都会报错,具体有以下几种情况: 更新过程中无问题,重启后黑屏更新过程中会卡在26%左右,然后蓝屏报KENERA ...
- Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java BasePooledObjectFactory 对象池化技术 通常一个对象创建.销毁非常耗时的时候,我们不会频繁的创建和销毁它,而是考虑复用.复用对象的一种做法就是对象池,将创建好的对象放入 ...
- MySQL笔记之一致性视图与MVCC实现
一致性读视图是InnoDB在实现MVCC用到的虚拟结构,用于读提交(RC)和可重复度(RR)隔离级别的实现. 一致性视图没有物理结构,主要是在事务执行期间用来定义该事物可以看到什么数据. 一.Read ...
- [数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案
前言 吐槽一下,均是这两天遇到的破烂事儿,搞定了也好,以后出现此类问题也就放心些了. 下列遇到的问题大都是因为MySQL从5.x版本升级到8.0.11(MySQL8.0涉及重大改版)后,跟着连带着出现 ...
- 飞桨paddlespeech语音唤醒推理C实现
上篇(飞桨paddlespeech 语音唤醒初探)初探了paddlespeech下的语音唤醒方案,通过调试也搞清楚了里面的细节.因为是python 下的,不能直接部署,要想在嵌入式上部署需要有C下的推 ...
- 通过重构来加深理解——DDD
上部分模型驱动设计的构造块为维护模型和实现之间的关系打下了基础.在开发过程中使用一系列成熟的基本构造块并运用一致的语言,能够使开发工作更加清晰而有条理. 我们面临的真正挑战是找到深层次的模型,这个模型 ...
- web 页面/内容 触摸/点击滑动
监听标签的触摸/鼠标滑动事件,添加元素的切换动画,效果如下: 事件监听 鼠标事件和触摸事件监听: 1 componentDidMount() { 2 var teachingReportDiv = d ...
- shiro拦截axios请求导致@RequireRole注解失效
文章目录 ShiroRequiresRole注解对于axios请求无效 场景再现 解决方案 网上的解决方案 最近在整理一个自己以前做过的系统,想要添加一些功能,发现shiro框架出现了点问题,觉得这个 ...
- Java 网络编程 —— 创建多线程服务器
一个典型的单线程服务器示例如下: while (true) { Socket socket = null; try { // 接收客户连接 socket = serverSocket.accept() ...
- 试用「ChatGPT」几周之后
冷静下来,不吹不黑. 01 最近半年,互联网一款现象级的应用诞生:「ChatGPT」: 其火爆的程度,不输前面的羊了个羊: 最初了解到ChatGPT还是春节的时候,但那时网上的测评还没引起足够的好奇心 ...