当前位置: 首页 > 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

http://www.lryc.cn/news/242638.html

相关文章:

  • 媒体增加日活量的有效策略
  • es6新特性总结
  • Spring Boot + hutool 创建海报图片
  • 0002Java程序设计-springboot在线考试系统小程序
  • Linux(Centos)上使用crontab实现定时任务(定时执行脚本)
  • 【Leetcode合集】20. 有效的括号
  • OpenGL 绘制线(Qt)
  • Java | 多线程并发编程CountDownLatch实践
  • 分布式定时任务系列6:XXL-job触发日志过大引发的CPU告警
  • Spark RDD、DataFrame和Dataset的区别和联系
  • 代码随想录算法训练营第四十五天|139.单词拆分、背包问题总结
  • 深度学习卫星遥感图像检测与识别 -opencv python 目标检测 计算机竞赛
  • wxWidgets 3.2.4发布 —— 发布于2023年11月11日
  • PyQt6运行QTDesigner生成的ui文件程序
  • 基于mediapipe的人手21点姿态检测模型—CPU上检测速度惊人
  • 系统架构设计: 21 论敏捷软件开发方法及其应用
  • 【深度学习】脸部修复,CodeFormer,论文,实战
  • OpenGL_Learn14(光照贴图)
  • 【JVM精讲与GC调优教程(概述)】
  • 蓝桥杯物联网竞赛_STM32L071_2_继电器控制
  • python之pyqt专栏2-项目文件解析
  • Kafka 集群如何实现数据同步
  • opencv- CLAHE 有限对比适应性直方图均衡化
  • IOS免签封装打包苹果APP的方法
  • Springboot引入分布式搜索引擎Es RestAPI
  • Lua脚本解决redis实现的分布式锁多条命令原子性问题
  • Vatee万腾独特科技力量的前沿探索:Vatee的数字化奇点
  • C++面试,const的使用
  • 小总结----长度
  • 【深度学习】如何选择神经网络的超参数