当前位置: 首页 > news >正文

Python开发运维:Django 4.2.7 使用Celery 5.3.5 完成异步和定时任务

目录

一、实验

1.Django使用Celery完成异步和定时任务

二、问题

1. 如何查看Django版本


一、实验

1.Django使用Celery完成异步和定时任务

(1)安装Django

5a9464f9ec8747a5a871ef12af45ee40.png

(2)新建Django项目

44a8545a19964884ba77d3f08d214911.png

(3)初始框架

4d8c2ecf5fb24ad6afff188b38689882.png

(4)urls.py引用视图views

from django.contrib import admin
from django.urls import path
from app01 import viewsurlpatterns = [path('admin/', admin.site.urls),path('test/',views.test)
]

d7fc8b935f81497dbd084c115bfe697d.png

(5)编写view

from django.shortcuts import render,HttpResponse# Create your views here.
def test(request):return HttpResponse("OK")

01feeba7ee1a41b6ba501630f5ec94fc.png

(6)点击运行

06027a586da5472cb8b40776ade14fc7.png

(7)查看运行结果,点击链接

daa1cbd3a45d4a03a11749a80f5a2c79.png

(8)显示OK

http://127.0.0.1:8000/test/

76d7e51dd94540c8ad89f872b203bfa2.png

(9)新建消费者目录mycelery

50975546a2984fe483d121edb726171f.png

(10)tasks.py文件定义异步或定时任务

c9b8ff5e829e46c39a87acd80b02bcf0.png

(11)编写配置文件config.py

#消息中间件
broker_url = 'redis://127.0.0.1:6379/15'
#异步存储地方
result_backend = 'redis://127.0.0.1:6379/14'

c202d200f6bb4d10b02aac06b616ae42.png

(12)main.py将配置文件解耦

# -*- coding: utf-8 -*-
# 主程序
import os
import celery as celery
from celery import Celery
import eventlet
# 创建celery实例对象
app = Celery("djcelery")
# 把celery和django进行组合,识别和加载django的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celeryPros.settings.dev')
# 通过app对象加载配置
app.config_from_object("mycelery.config")
# 加载任务
# 参数必须必须是一个列表,里面的每一个任务都是任务的路径名称
# app.autodiscover_tasks(["任务1","任务2"])
app.autodiscover_tasks(["mycelery.sms",])

655de13e4cd4427d834992a34875add8.png

(13)tasks文件

# -*- coding: utf-8 -*-
# celery的任务必须写在tasks.py的文件中,别的文件名称不识别!!!
from mycelery.main import app
import time
import logging
log = logging.getLogger("django")
@app.task  # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
def send_sms(mobile):"""发送短信"""print("向手机号%s发送短信成功!"%mobile)time.sleep(5)return "send_sms OK"
@app.task  # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
def send_sms2(mobile):print("向手机号%s发送短信成功2!"%mobile)time.sleep(5)return "send_sms2 OK"

62620b8b00d047ebb4f6480f79975ae1.png

(14)view视图添加异步代码

from django.shortcuts import render,HttpResponse
# Create your views here.
from mycelery.sms.tasks import send_sms,send_sms2
def test(request):#异步任务# 1. 声明一个和celery一模一样的任务函数,但是我们可以导包来解决# send_sms.delay("139XXXXXXXX")# send_sms2.delay("135XXXXXXXX")# send_sms.delay() 如果调用的任务函数没有参数,则不需要填写任何内容

f2dbe534582146f8aff7f77cedbf0ffc.png

(15)浏览器刷新或回车,进行观察

cc4816e2f20344b3b3214b9b7d14437b.png

(16)消费者一方配置完成

120dc93fd71e4bba828e8c20760617e8.png

(17) mycelery根目录

9461d0dbae3d44c7bf3edb2e32ab9fd5.png

(18)已启动消费

PS D:\soft\Djcelery> celery --app=mycelery.main worker -n node1 -l INFO -P eventlet

1656a3e859874dc9a5724db7e8352afc.png

(19)查看异步消息

f2e57b9088aa41d9ba087e61d1d8a24f.png

(20)注释异步任务代码

79fefee8862248368ac2339656859b48.png

(21)添加定时任务代码

    #定时任务from datetime import datetime,timedeltactime = datetime.now()# 默认用utc时间utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())time_delay = timedelta(seconds=10)task_time = utc_ctime + time_delayresult = send_sms.apply_async(["136XXXXXXXX", ], eta=task_time)print(result.id)

29ded7510c854ca2b62b7256ce541dd1.png

(22)浏览器再次刷新或回车,进行观察

5710441dc152442385b142237a6646d5.png

(23)查看定时消息

013c86c38e8947f9853fe7fb3ce76862.png

(24)查看RUN结果

cf0fb8b158434f4fad0d3250dcae1882.png

(25)完整项目架构

b703389168dc462ebdc6e19b83e97dca.png

(26)查看Redis可视化界面

0e08f08eb733447e94fd7e092f1e7ba9.png

cc6400fb94a84fcfa76e947deafe376e.png

e7087865617743b4b029ebb975817699.png

a5d29e2cd7f249699228817ad7e157de.png

二、问题

1. 如何查看Django版本

(1)方式一

indows系统下,在cmd命令窗口中输入python进入Python解释器
Linux系统下, 直接使用终端调用Python解释器接下来输入:
>>> import django
>>> print django.VERSION # Python2的格式
>>> print(django.VERSION) # Python3的格式 或者输入:
>>> django.get_version()  # 获取当前djiango版本号

(2)方式二

在IDE内 的terminal 内输入python -m django --versiondjango-admin --version这两个命令 一样可以查询到。注意:通常在项目的目录下查询。这种方式适合项目已经建立,虚拟Python环境也已经配置好。Django不是全局安装的时候。

(3)方式三

Windows系统下,在cmd命令窗口中输入python进入Python解释器Linux系统下,直接使用终端调用Python解释器直接输入:
python -m django --versiondjango-admin --version注意:这里django是全局安装。

(4)方法四

在项目目录下的lib文件夹内的site-packpage文件夹内直接可以看到Django版本。

6b6311d8fd3944f7968a718dde6af178.png

相关文章:

Python开发运维:Django 4.2.7 使用Celery 5.3.5 完成异步和定时任务

目录 一、实验 1.Django使用Celery完成异步和定时任务 二、问题 1. 如何查看Django版本 一、实验 1.Django使用Celery完成异步和定时任务 (1)安装Django (2)新建Django项目 (3)初始框架 (4)urls.py引用视图views from django.contrib import admin from django.urls imp…...

媒体增加日活量的有效策略

随着数字媒体的蓬勃发展,提高日活量成为媒体平台追求的重要目标之一。日活量的增加不仅意味着更广泛的影响力,还能为媒体平台带来更多的商业机会。以下是一些有效的策略,可帮助媒体提高日活量: admaoyan猫眼聚合 内容优质化&#…...

es6新特性总结

1、支持了let和const,为了防止var声明变量带来的变量提升 (1)、存在块级作用域不存在变量提升(考虑暂时性死区) (2)、不允许重复声明(包括普通变量和函数参数)变量提升…...

Spring Boot + hutool 创建海报图片

Spring Boot hutool 创建海报图片 /*** 分享,生成图片* param id* return*/GetMapping("/getShareImg")public void getShareImg(String id,HttpServletResponse response) throws IOException {CouponConsignSaleClassify byId couponConsignSaleClassifyService…...

0002Java程序设计-springboot在线考试系统小程序

文章目录 **摘 要****目录**系统实现开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅🐧裙:776871563 摘 要 本毕业设计的内容是设计并且实现一个基于springboot的在线考试系统小程序。它是在Windows下,以MYSQL为数据库开发平台&…...

Linux(Centos)上使用crontab实现定时任务(定时执行脚本)

场景 Windows中通过bat定时执行命令和mysqldump实现数据库备份: Windows中通过bat定时执行命令和mysqldump实现数据库备份_mysqldump bat-CSDN博客 上面讲windows中使用bat实现定时任务的方式,如果是在linux上可以通过crontab实现。 cron是服务名称。…...

【Leetcode合集】20. 有效的括号

20. 有效的括号 20. 有效的括号 代码仓库地址: https://github.com/slience-me/Leetcode 个人博客 :https://slienceme.xyz 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串…...

OpenGL 绘制线(Qt)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里同样对OpenGL中的绘制线操作进行封装,便于后续的操作,很多形状也都是基于线来生成的,如圆形等。 二、实现代码 LineDrawable.h #ifndef LINE_DRAWABLE_H #define LINE_DRAWABLE_H#include...

Java | 多线程并发编程CountDownLatch实践

关注:CodingTechWork 引言 在一次数据割接需求中,数据需要通过编程的方式进行转移割接到新平台,此时若串行化方式,无疑会拉锯此次战斗,所以首当其冲要使用并发编程来降低割接时长。  本次主要考虑使用CountDownLatc…...

分布式定时任务系列6:XXL-job触发日志过大引发的CPU告警

传送门 分布式定时任务系列1:XXL-job安装 分布式定时任务系列2:XXL-job使用 分布式定时任务系列3:任务执行引擎设计 分布式定时任务系列4:任务执行引擎设计续 分布式定时任务系列5:XXL-job中blockingQueue的应用 …...

Spark RDD、DataFrame和Dataset的区别和联系

一、三种数据介绍 是Spark中的三种不同的数据结构,它们都可以用于分布式数据处理,但是它们的实现方式和使用方法略有不同。 RDD(弹性分布式数据集) RDD是Spark最初的核心数据结构,它是一个分布式的、只读的、可容错的…...

代码随想录算法训练营第四十五天|139.单词拆分、背包问题总结

LeetCode 139. 单词拆分 题目链接:139. 单词拆分 - 力扣(LeetCode) 这道题使用完全背包来实现,我们首先考虑字符串是否可以由字符串列表组成,因此dp数组大小为n 1 ,其意义是,在n个位置时是否能…...

深度学习卫星遥感图像检测与识别 -opencv python 目标检测 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...

wxWidgets 3.2.4发布 —— 发布于2023年11月11日

稳定的3.2系列中的另一个版本现在可以在GitHub上获得。您可以在那里找到包含库源代码和文档的归档文件,以及所选Windows编译器(如Microsoft Visual C、MinGW-w64和TDM-GCC)的二进制文件。您还可以阅读此版本的更新文档,特别是&…...

PyQt6运行QTDesigner生成的ui文件程序

2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计18条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~、第2讲 PyQt6库和工具库Q…...

基于mediapipe的人手21点姿态检测模型—CPU上检测速度惊人

前期的文章,我们介绍了MediaPipe对象检测与对象分类任务,也分享了MediaPipe的人手手势识别。在进行人手手势识别前,MediaPipe首先需要进行人手的检测与人手坐标点的检测,经过以上的检测后,才能把人手的坐标点与手势结合起来,进行相关的手势识别。 MediaPipe人手坐标点检测…...

系统架构设计: 21 论敏捷软件开发方法及其应用

论敏捷软件开发方法及其应用 请围绕“敏捷软件开发方法及其应用”论题,依次从以下三个方面进行论述。 ①简述你所参与开发的运用了敏捷技术的项目,以及你所担任的工作; ②分析并讨论敏捷<...

【深度学习】脸部修复,CodeFormer,论文,实战

代码&#xff1a; https://github.com/sczhou/CodeFormer https://huggingface.co/spaces/sczhou/CodeFormer 论文&#xff1a;https://arxiv.org/abs/2206.11253 Towards Robust Blind Face Restoration with Codebook Lookup Transformer 文章目录 论文摘要1 引言2 相关工…...

OpenGL_Learn14(光照贴图)

1. 漫反射贴图 在光照场景中&#xff0c;它通常叫做一个漫反射贴图(Diffuse Map)&#xff08;3D艺术家通常都这么叫它&#xff09;&#xff0c;它是一个表现了物体所有的漫反射颜色的纹理图像。 我们会将纹理储存为Material结构体中的一个sampler2D 。我们将之前定义的vec3漫反…...

【JVM精讲与GC调优教程(概述)】

如何理解虚拟机(JVM)跨语言的平台 java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,他只关心“字节码”文件。 java不是最强大的语言,但是JVN是最强大的虚拟机。 不存在内存溢出? 内存泄露? JAVA = (C++)–; 垃圾回收机制为我们打理了很多繁琐的…...

大模型微调面试100问,非常详细收藏我这一篇就好了!

本文系统梳理了LoRA权重更新梯度反向传播公式推导&#xff0c;解释了固定只训练和能显著减少显存占用的原因。深入解析了QLoRA中NF4量化原理及其利用高斯分布优化量化区间的机制。详细阐述了Double Quantization在QLoRA中的实现步骤及其显存节省效果。推导了DPO损失函数从RLHF目…...

GVINS数据集评测:用自录ROS Bag在室内外验证GNSS拒止下的定位恢复能力

GVINS实战评测&#xff1a;如何用自采集数据验证GNSS拒止环境下的定位鲁棒性 去年夏天&#xff0c;我们在深圳某工业园区测试无人机自主巡检系统时&#xff0c;遇到了一个棘手问题——当飞行器从开阔区域进入钢结构厂房时&#xff0c;GNSS信号突然衰减导致的定位漂移让飞行轨迹…...

鸣潮自动化工具ok-ww:5分钟搞定每日重复任务的终极解决方案

鸣潮自动化工具ok-ww&#xff1a;5分钟搞定每日重复任务的终极解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否厌倦…...

避坑指南:RK3588上Rviz和Gazebo报‘GLX’错的根本原因与两种修复方案(Wayland/X11)

RK3588图形兼容性深度解析&#xff1a;从GLX报错到Rviz/Gazebo流畅运行的工程实践 当你满心欢喜地在RK3588上配置好ROS环境&#xff0c;准备用Rviz可视化传感器数据或用Gazebo测试机器人算法时&#xff0c;终端突然抛出"GLX"相关的错误提示——这种挫败感我深有体会。…...

如何处理SQL存储过程编码格式_检查数据库默认排序规则

SQL Server存储过程中文乱码主因是排序规则不匹配而非字符集问题&#xff0c;需逐层检查数据库、表列、字符串字面量&#xff08;须加N前缀&#xff09;、动态SQL及客户端驱动是否统一支持Unicode或UTF-8排序规则。SQL Server 存储过程中中文乱码&#xff0c;大概率是排序规则不…...

拒绝踩坑!Windows 系统完整安装 Claude Code 命令行工具实战指南

1. 常见误区&#xff1a;切勿使用 PowerShell 直连下载脚本 在安装许多开源工具&#xff08;如 Homebrew 或 Chocolatey&#xff09;时&#xff0c;我们习惯了使用一行命令直接拉取并运行网络脚本。因此&#xff0c;部分开发者在寻找 Claude Code 安装方法时&#xff0c;可能会…...

告别CAD格式兼容烦恼:用PythonOcc+Node.js将STEP/IGS/STL一键转成Web3D可用的glb文件

工业级CAD模型Web化实战&#xff1a;PythonOcc与Node.js构建自动化glb转换流水线 当机械工程师将设计好的STEP模型交给前端团队时&#xff0c;最常听到的抱怨是&#xff1a;"这个格式Three.js根本不支持&#xff01;"传统解决方案往往依赖手动操作桌面软件导出中间格…...

从刷题到实战:一文搞懂C/C++进制转换(含itoa、strtol、bitset函数避坑指南)

从刷题到实战&#xff1a;C/C进制转换全攻略与避坑指南 引言&#xff1a;为什么进制转换如此重要&#xff1f; 记得第一次参加技术面试时&#xff0c;面试官抛出一道看似简单的题目&#xff1a;"如何将十六进制的颜色代码转换为RGB值&#xff1f;"当时手忙脚乱的样子…...

从零开始:NSC_BUILDER让你的Switch游戏管理事半功倍

从零开始&#xff1a;NSC_BUILDER让你的Switch游戏管理事半功倍 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights encryption…...

Spring Cloud Gateway 踩坑实录:升级到2020+版本后,lb://服务名路由503?一个依赖搞定

Spring Cloud Gateway 2020版本升级指南&#xff1a;解决lb://服务名路由503问题 最近在将Spring Cloud项目从Hoxton升级到2020.0.x及以上版本时&#xff0c;不少开发者遇到了一个奇怪的问题&#xff1a;原本运行良好的Gateway路由配置突然失效&#xff0c;特别是使用lb://服务…...