Django中使用Celery(通用方案、官方方案)

Django中使用Celery(通用方案、官方方案)

目录

  • Django中使用Celery(通用方案、官方方案)
    • 通用方案
      • 场景
      • 前置准备
      • 完整代码
    • Celery官方方案
      • 【1】注册celery配置
      • 【2】创建celery文件
      • 【3】init注册
      • 【4】添加任务
      • 【5】启动worker异步任务
      • 【6】在view中调用

通用方案

场景

现在定义了一张图片表,要求每隔一段时间就将表内容更新进缓存库中

前置准备

  • 安装模块
pip install Django4.2.13
pip install celery
pip install cache
pip install eventlet
pip install redis
  • 定义图片表
from django.db import models

class Display(models.Model):
    title = models.CharField(max_length=16, unique=True, verbose_name='名称')
    image = models.ImageField(upload_to='banner', verbose_name='图片')
    link = models.CharField(max_length=64, verbose_name='跳转链接')
    info = models.TextField(verbose_name='详情')
  • 路径结构

image-20240517163748104

完整代码

# tasks.py
from celerys import app
from datetime import timedelta

app.conf.beat_schedule = {
    'update_cache_every_30_seconds': {
    'task': 'celerys.update_cache',
    'schedule': timedelta(seconds=30),
    },
}
# celerys.py
import os
import sys

# 执行文件必须与Django配置的环境变量同级(manage.py)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Luffy_API.settings.dev')
import django
django.setup()

from app.models import Display
from app.serializer import DisplaySerializer
from celery import Celery
from celery.schedules import crontab
from datetime import timedelta
from django.core.cache import cache

broker = 'redis://127.0.0.1:6379/1'
backend = 'redis://127.0.0.1:6379/2'
app = Celery('celery',broker=broker,backend=backend)

@app.task
def update_cache():
    queryset = Display.objects.all()
    serializer = DisplaySerializer(instance=queryset, many=True)
    cache_data = queryset.values()
    cache.set('display', cache_data)
    return '缓存已更新'
  • 执行命令
celery -A celerys worker -l info -P eventlet
celery -A tasks beat -l info

Celery官方方案

【1】注册celery配置

settings中添加Celery的配置文件

# 用redis创建队列库1
CELERY_BROKER_URL='redis://127.0.0.1:6379/1'
# 用redis创建结果存储库2
CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/2'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TASK_SERIALIZER='json'
# 结果序列化方案
CELERY_RESULT_SERIALIZER='json'
# 任务结果过期时间,秒
CELERY_TASK_RESULT_EXPIRES=60 * 60 * 24
# 时区配置
CELERY_TIMEZONE='Asia/Shanghai'

【2】创建celery文件

新建tasks文件和celerys文件

  • 目录结构

image-20240518235114242

【3】init注册

在根目录下的__init__.py文件中注册celerys文件,如果不加则会自动识别根目录中的celery文件而不是我们创建的celerys

from .celerys import app as celery_app

__all__=('celery_app',)

【4】添加任务

tasks.py文件中存储要被执行的异步文件

from celerys import app

@add.task()
def add(a, b):
    return a + b

celerys.py存放celery的配置文件

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Django_API.settings.dev')
import django
from celery import Celery, shared_task
from django.conf import settings

# 启动worker的命名
app = Celery('Django_API')

# 自动检索前缀为CELERY的配置
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动搜索每个app中的tasks.py文件
app.autodiscover_tasks()

【5】启动worker异步任务

启动worker

celery -A Django_API worker -l info -P eventlet

【6】在view中调用

from rest_framework.views import APIView
from rest_framework.response import Response
from .tasks import add

class TestView(APIView):
    def get(self, request):
        res = add.delay(500, 2)
        return Response(f'res:{res}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/632930.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【qt】下拉列表组件

下拉列表组件 一.Combo Box1.可以直接双击编辑下拉内容2.代码初始化下拉内容3.一次性添加多个下拉内容4.下拉框手动编辑5.下拉内容添加附加值6.下拉添加图标7.获取下拉值 二.总结 一.Combo Box 还是老样子,咱们边做边练 目标图: 1.可以直接双击编辑下…

ThreadLocal原理及使用

一、引言 在Java多线程编程中,ThreadLocal是一个非常有用的工具,它提供了一种将对象与线程关联起来的机制,使得每个线程都可以拥有自己独立的对象副本,从而避免了线程安全问题。然而,使用不当会导致内存泄漏问题。 二…

el-input 自动获取焦点

前言: 需求描述:在 Dialog 对话框中 使用 input 组件;当点击按钮,Dialog 对话框显示,且里面的 input 组件要自动获取焦点。因为页面上还存在其他的 input 组件,所以使用 自动获取焦点属性没用!&…

AppInventor2要在界面上做一个电量图标,有什么好的思路吗?

问:要在界面上做一个电量图标,有什么好的思路吗? 答:首先,很容易想到使用进度条相关的组件,原生”滑动条“组件可以吗? 答案显而易见,首先它的样式自定义不够,UI不外乎上…

使用Flask Swagger自动生成API文档

文章目录 安装Flask Swagger使用Flask Swagger生成API文档总结1. 自动化文档生成2. 交互式文档展示3. 规范化API设计4. 提升协作效率5. 支持多种格式 Flask Swagger是一种用于管理Flask API文档的工具。它基于OpenAPI规范,可以自动生成API的交互式文档。使用Flask S…

明火炒菜不安全?NO 华火新能源电燃灶“电生明火”安全又环保

明火炒菜,色味俱全,这就是为什么电磁炉(无火)炒菜不好吃,越来越少人用的主要原因! 在中国,明火炒菜这一传统的烹饪方式延绵了几千年,是中华文化传承的瑰宝,早已根深蒂固于…

k8s 部署 CoreDNS master02 节点部署 负载均衡部署

目录 一、部署 CoreDNS 1.1.在所有 node 节点上操作 1.2.在 master01 节点上操作 1.3.DNS 解析测试 二、master02 节点部署 2.1.从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点 2.2.修改配置文件kube-apiserver中的IP 2.3.在 …

NegativePrompt:利用心理学通过负面情绪刺激增强大型语言模型

【摘要】大型语言模型 (LLM) 已成为各种应用不可或缺的一部分,从传统的计算任务到高级人工智能 (AI) 应用。这种广泛的应用促使社会科学等各个学科对 LLM 进行了广泛的研究。值得注意的是,研究表明 LLM 具有情商,可以通过积极的情绪刺激进一步…

温故而知新-JUC篇【面试复习】

温故而知新-JUC篇【面试复习】 前言版权推荐温故而知新-JUC篇多线程Java语言中的线程安全线程安全的实现方法线程的创建线程的状态wait和sleep的区别ThreadLocalsynchronize的优化synchronize和Reentrant的对比AQS线程池ThreadPoolExecutorThreadPoolExecutor源码ConcurrentHas…

C++下的内存管理

文章目录 内存分布C语言中动态内存管理方法C内存管理new/delete操作内置类型new和delete操作自定义类型operator new 和 operator deletenew和delete的实现原理定位new表达式 malloc/free和new/delete的区别内存泄漏 内存分布 栈:又叫做堆栈–非静态局部变量/函数参…

org.json下载方法

介绍org.json下载的一些方法。 工具/原料 浏览器 方式一 在百度上搜索org.json,点击第一个搜索结果。进入JSON网站后,可以看到有各种语言版本的json工具包,选择JSON-java。 点击JSON-java后页面跳转到GitHub上,在该网页上点击…

C++设计模式---面向对象原则

面向对象设计原则 原则的目的:高内聚,低耦合 1. 单一职责原则 类的职责单一,对外只提供一种功能,而引起类变化的原因都应该只有一个。 2. 开闭原则 对扩展开放,对修改关闭;增加功能是通过增加代码来实现的&…

webpack5零基础入门-15样式兼容性问题处理

1.下载相关依赖 npm i postcss-loader postcss postcss-preset-env -D 2.在webpack.config.js中配置 注意:postcss-loader要在css-loader后面配置 3.写一个flex布局,flex是存在一定的兼容性问题的 4.打包 可以看到打包后未被处理 1.下载相关依赖 np…

js实现鼠标拖拽多选功能

实现功能 在PC端的H5页面中&#xff0c;客户拖动鼠标可以连选多个选项 效果展示 具体代码如下 <!DOCTYPE html> <html><head><title>鼠标拖拽多选功能</title><script src"https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js&quo…

【Text2SQL 经典模型】TypeSQL

论文&#xff1a;TypeSQL: Knowledge-Based Type-Aware Neural Text-to-SQL Generation ⭐⭐⭐ Code: TypeSQL | GitHub 一、论文速读 本论文是在 SQLNet 网络上做的改进&#xff0c;其思路也是先预先构建一个 SQL sketch&#xff0c;然后再填充 slots 从而生成 SQL。 论文发…

Epson推出多摄像头接口芯片S2D13P04

目前&#xff0c;汽车电子的发展日新月异&#xff0c;汽车显示控制器也更多地采用芯片集成化设计的趋势伴随着目前ADAS系统的发展&#xff0c;大量的摄像头和雷达传感器应用到汽车电子中。传统的系统集成方案通常采用多通道电路来处理多摄像头信号输入的方案&#xff0c;但是车…

Oracle体系结构初探:数据库启动与停止

往期内容 参数管理 控制文件添加 启动 在启动Oracle数据库时&#xff0c;我们一般会使用如下命令&#xff1a; startup 虽然命令只有一个&#xff0c;但其中却是经历了3个阶段&#xff0c;从下面执行 startup 命令返回也可以看出来。 总结为3个阶段&#xff1a; nomount&…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-22讲 RTC 时钟设置

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

GPT‑4o普通账户也可以免费用

网址 https://chatgpt.com/ 试了一下&#xff0c;免费的确实显示GPT‑4o的模型&#xff0c;问了一下可以联网&#xff0c;不知道能不能通过插件出图 有兴趣的可以试试

测试环境KDE组件漏洞修复

yarn白名单方案 解决漏洞: 方案: 此方式主要使用iptables的功能,对yarn的resourceManager服务的8088端口进行访问ip限制,目的限制8088端口只允许集群内ip访问。 #分别在两台resourceManager节点执行以下步骤ssh kde-offline1 #安装iptables服务,并启动设置为开机自启 yum …