当前位置: 首页 > 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++)–; 垃圾回收机制为我们打理了很多繁琐的…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor

1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的&#xff0c;如果需要进行.NET开发&#xff0c;则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET&#xff0c;所以要进…...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...

python打卡day49@浙大疏锦行

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...

react更新页面数据,操作页面,双向数据绑定

// 路由不是组件的直接跳转use client&#xff0c;useEffect&#xff0c;useRouter&#xff0c;需3个结合&#xff0c; use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…...

开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例

在工业自动化控制系统中&#xff0c;常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中&#xff0c;客户现场采用了 罗克韦尔PLC&#xff0c;但需要控制的变频器仅支持 ModbusRTU 协议。为了实现PLC 对变频器的有效控制与监控&#xff0c;引入了开疆智能Etherne…...