首页 > 其他分享 >celery笔记四之在Django中使用celery

celery笔记四之在Django中使用celery

时间:2023-06-15 20:33:08浏览次数:49  
标签:task app py hunter 笔记 Django celery

本文首发于公众号:Hunter后端
原文链接:celery笔记四之在Django中使用celery

这一篇笔记介绍一下如何在 Django 系统中使用 celery。

如果是想纯粹使用 celery,这一篇笔记可以略过。

本篇笔记目录如下:

  1. 文件配置
  2. task 定义
  3. 运行 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 的表来设置定义任务等,这个我们后面再单开笔记来详细介绍。

如果想获取更多后端相关文章,可扫码关注阅读:
image

标签:task,app,py,hunter,笔记,Django,celery
From: https://www.cnblogs.com/hunterxiong/p/17484051.html

相关文章

  • django 设置定时任务
    django设置定时任务,网上百度了好几种方式,试了这两种方式,简单有效:例如,我们要设置最简单的执行场景,5s输出一次helloworld。(1)通过whileTrue设置定时任务importtimedefrun():print("hello,world")if__name__=='__main__':whileTrue:run()......
  • 【学习笔记】Primal-Dual 原始对偶算法
    Johnson全源最短路算法Floyd可以\(O(n^3)\)处理全源最短路,Bellman-Ford单源最短路的复杂度是\(O(nm)\)的,Dijkstra可以做到\(O(m\logm)\)但不能处理负边权,所以Johnson全源最短路算法通过处理使得可以用\(n\)次Dijkstra解决有负权图的全源最短路。先建超级源点,向......
  • 数字逻辑电路 复习笔记
    挑战从零开始学习数电(1/3)Ch1数制与码制1.1数制基数(\(R\)进制)位权(\(X^0,X^1,X^2,...\))1.2码制带符号的二进制数的编码原码:正数符号位0,负数符号位1,数值不变反码:整数符号位不变,其余取反;纯小数符号位不变,其余取反\(+0.1101\Rightarrow0.1101\)\(-0.1101\Rightarr......
  • Java基础面试笔记(三) _Spring
    1.Spring框架有哪些主要模块?截止到目前Spring框架已集成了20多个模块。这些模块主要被分如下图所示的核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。2.什么是依赖注入?什么是控制反转(IOC)?在Spring中,有几种依赖注入方式?依赖注入是在编译......
  • XML反序列化笔记
    反序列化枚举类型public银行卡类型marcaTarjeta{get;set;}publicenum银行卡类型{[XmlEnum(Name="0")]UnKnown=0,[XmlEnum(Name="1")]VISA=1,[XmlEnum(Name="2")]MASTERC......
  • Java 入门学习笔记
    Java特性和优势简单性面向对象可移植性高性能分布性动态性(反射)多线程安全性健壮性Java三大版本WriteOnce、RunAnywhere通过JVMJavaSE:标准版(桌面程序,控制台开发...)基础JavaME:嵌入式开发(手机,小家电...)JavaEE:E企业级开发(web端,服务器开发)JDK、JRE、JV......
  • Hibernate学习笔记
    大小写不敏感持久化类一般被定义为JavaBean,这是推荐的设计,但是并不是必须的。Hibernate也可以直接访问这些field。所有的持久化类(persistentclasses)都要求有无参的构造器,因为Hibernate必须使用Java反射机制来为你创建对象。映射文件一个映射文件看起来像这样<hibernate-mapping>......
  • Supervisor启动并管理Celery相关进程
    Supervisor启动并管理Celery相关进程关于celery在运行过程中,默认情况下是无法在关机以后自动重启的。所以我们一般开发中会使用supervisor进程监控来对celery程序进行运行监控!当celery没有启动的情况下,supervisor会自动启动celery,所以我们需要安装supervisor并且编写一个supervi......
  • 「学习笔记」三角函数
    有关三角函数的公式、转化、证明等等\[\sin^2\alpha+\cos^2\alpha=1\\\dfrac{\sin\alpha}{\cos\alpha}=\tan\alpha\\(\sin\alpha\pm\cos\alpha)^2=1\pm2\sin\alpha\cos\alpha\\\sin\alpha=\cos\alpha\tan\alpha\\\sin......
  • Rust学习笔记——基于官网和Rust语言圣经
    安装rust安装1、官网https://www.rust-lang.org/zh-CN/learn/get-started2、运行后选择1会下载VisualStdio;选择2表示你是高级用户或企业用户;选择3即是采用MinGW编译选择1选1表示默认当前配置安装,选2表示自定义这些配置,选3表示取消安装更新与卸载Rust更新Rustrustupup......