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 import path
from app01 import viewsurlpatterns = [path('admin/', admin.site.urls),path('test/',views.test)
]

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

(6)点击运行

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

(8)显示OK
http://127.0.0.1:8000/test/

(9)新建消费者目录mycelery

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

(11)编写配置文件config.py
#消息中间件
broker_url = 'redis://127.0.0.1:6379/15'
#异步存储地方
result_backend = 'redis://127.0.0.1:6379/14'

(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",])

(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"

(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() 如果调用的任务函数没有参数,则不需要填写任何内容

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

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

(17) mycelery根目录

(18)已启动消费
PS D:\soft\Djcelery> celery --app=mycelery.main worker -n node1 -l INFO -P eventlet

(19)查看异步消息

(20)注释异步任务代码

(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)

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

(23)查看定时消息

(24)查看RUN结果

(25)完整项目架构

(26)查看Redis可视化界面




二、问题
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版本。

相关文章:
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,论文,实战
代码: https://github.com/sczhou/CodeFormer https://huggingface.co/spaces/sczhou/CodeFormer 论文:https://arxiv.org/abs/2206.11253 Towards Robust Blind Face Restoration with Codebook Lookup Transformer 文章目录 论文摘要1 引言2 相关工…...
OpenGL_Learn14(光照贴图)
1. 漫反射贴图 在光照场景中,它通常叫做一个漫反射贴图(Diffuse Map)(3D艺术家通常都这么叫它),它是一个表现了物体所有的漫反射颜色的纹理图像。 我们会将纹理储存为Material结构体中的一个sampler2D 。我们将之前定义的vec3漫反…...
【JVM精讲与GC调优教程(概述)】
如何理解虚拟机(JVM)跨语言的平台 java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,他只关心“字节码”文件。 java不是最强大的语言,但是JVN是最强大的虚拟机。 不存在内存溢出? 内存泄露? JAVA = (C++)–; 垃圾回收机制为我们打理了很多繁琐的…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
