django-q轻量级定时任务制定

news2024/9/24 21:22:09

django-q ,celery,apschedule都可以作为python的选型,但是django-q更轻量级,可以定制想要的任务,通过消息中间件,来实现不太高并发的实现
官网介绍地址
django-q官网地址

本次测试的是python3.12版本
首先需要安装django-q,具体安装方式pip install django-q
国内的话可以选择清华或者豆瓣源进行安装
最后在settings.py文件中INSTALLED_APPS添加

INSTALLED_APPS = [
	#放在最后面添加即可
    'django_q',

]

然后配置队列消息中间件
相关消息中间件配置可以参照官网
中间件选型
为了测试方便选择了orm配置
settings.py添加如下内容

Q_CLUSTER = {
    'name': 'DjangORM',
    'workers': 1,
    'timeout': 90,
    'retry': 120,
    'queue_limit': 50,
    'bulk': 10,
    'orm': 'default'
}

为了方便views.py视图,自己创建了一个app01项目
核心代码如下

from django.shortcuts import render,HttpResponse
from django.http import JsonResponse,request

# Create your views here.

import math


def demo_task(number):
    print(number,type(number))
    return math.sqrt(number)


from django_q.tasks import async_task, Task


def task_finish(task: Task):
    print(f'任务 {task.name}(ID:{task.id})完成!')
# hook参数是执行完成回调函数,可以通过admin后台查看结果
def create_task(request):
    task_id=async_task(
        demo_task, 10,
        task_name='测试任务1',
        hook=task_finish,
    )
    return JsonResponse({'task_id':task_id,'result':'成功'})


from django_q.tasks import schedule,Schedule

def create_cron1(request):
    schedule(
        'app01.views.demo_task',1000,
        schedule_type=Schedule.MINUTES,
        minutes=1,
        task_name='定时任务1',
    )
    return JsonResponse({'result':'定时任务1创建'})

配置相关的urls.py路由前端能识别到
在这里插入图片描述
执行每个命令分别新开一个窗口执行,前三步必须顺序执行,后两步骤可部分先后顺序执行

python manage.py makemigrations
python manage.py migrate
python manage.py runserver
python manage.py createsuperuser
python manang.py qcluster

打开浏览器执行
在这里插入图片描述
可以看到定时任务已经创建
在这里插入图片描述
为什么是两个定时任务因为有一个是我之前创建
在这里插入图片描述
可以看到里面的参数,我们可以定制修改

定时任务执行结果
在这里插入图片描述

Django-Q的定时任务类型:

一次性

按x分钟执行一次

每小时一次

每天

每周

每月

每季度

每年

Cron表达式

注意,即使是Cron表达式,定时任务执行的最短间隔也是1分钟缘由

The current design has a heartbeat of 30 seconds, which means the schedule table can't have schedules below that. Most of this is explained in the architecture docs. Because of the way the internal loop is set up, a resolution under a dozen seconds or so, quickly becomes unreliable.

I always imagined tasks that need accuracy measured in seconds, would use a delayed tasks strategy where a few seconds delay is either added through the broker or inside the task itself.

The problem with all this, is that a task is currently always added to the back of the queue. So even with a 1 second resolution on the schedule, the task still has to wait it's execution time. Which can of course vary wildly depending on the broker type, worker capacity and current workload.

当然如果触发了定时任务也可以触发信号
signal官网文档

具体完整版本可以参考附件下载

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ELK日志管理实现的3种常见方法

ELK日志管理实现的3种常见方法 1. 日志收集方法 1.1 使用DaemonSet方式日志收集 通过将node节点的/var/log/pods目录挂载给以DaemonSet方式部署的logstash来读取容器日志,并将日志吐给kafka并分布写入Zookeeper数据库.再使用logstash将Zookeeper中的数据写入ES,并通过kibana…

C语言函数—递归

这方面内容涉及到栈的使用,我们的递归函数如果被执行那么系统将会自动的去创建一个栈,相关内容有机会单独写文章讲解 什么是递归? 程序调用自身的编程技巧称为递归( recursion)。 递归做为一种算法在程序设计语言中广泛…

基于单片机的恒压供水控制器设计

摘 要 随着我国现代化的进程不断加快,城市居民生活水平不断提高,随之而来的是房屋的翻新和重建,但建筑层数的不断增高,使得供水所需压力不断提高,若建筑设计时对压力判断不足,会导致供水时无法供应到高楼层…

643.子数组最大平均数

题目:给你一个由 n 个元素组成的整数数组 nums 和一个整数k。 找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。 任何误差小于10^-5 的答案都将被视为正确答案。 解题思路:规定了子数组的长度为k,因此可以通过寻找子…

新冠疫情仍处流行期,防疫不松懈

2024年2月北京市法定传染病疫情概况已公布,全市共报告了21种法定传染病,累计病例数达到88971例,不幸有12人因疾病离世。这些病例主要集中在病毒性肝炎、肺结核、百日咳、梅毒、新型冠状病毒感染、流行性感冒以及其他感染性腹泻病等。 值得一提…

概率论与数理统计(随机事件与概率)

1随机事件与概率 1.1随机事件及其运算规律 1.1.1运算 交换律结合律分配律德摩根律 1.2概率的定义及其确定方法 1.2.1概率的统计定义 频率 设在 n 次试验中,事件 A 发生了(A)次,则称为事件 A 发生的频率。 1.2.2概率的统计定义 在一组恒定不变的条…

Mybatis(搭建,CRUD,方法参数,XML映射文件,动态SQL)【详解】

目录 一.准备基础代码 Mybatis的通用配置 二. 基本CURD操作 1.查询-根据id查询一条 2.查询-查询数量 3.删除 4.新增 获取主键值 5.修改 6.查询-模糊查询 预编译SQL #{}与${}的区别【面试题】 三. Mybatis的方法参数与结果集 1.SQL里取方法参数的值 2.查询结果集…

react native常用插件

react-native-async-storage/async-storage 说明:AsyncStorage 是一个在 react-native 中轻量存储的库;跟 localStorage 类似,API 也几乎一样;存储的时候需要将存储内容转成字符串存储。 react-navigation/material-bottom-tabs …

Ubuntu Flask 运行 gunicorn+Nginx 部署

linux Ubuntu 下运行python 程序出现killed 原因:CPU或内存限制:在华为云上,你可能有CPU或内存使用的限制。例如,如果你使用的是一个固定大小的实例,那么超过该实例的CPU或内存限制可能会导致进程被杀死。 参考&am…

Gateway网关在url参数带有特殊字符的情况下转发失败(响应400)

本文主要分享了,SpringCloud Gateway网关在url参数带有空格或者特殊字符的情况下,转发失败导致响应错误码400的解决方案。 响应400错误码的2种场景: 1.参数带空格,Gateway会误认为该空格是切割符,如?phone 135****6…

基于单片机的公交车IC卡操作系统的设计

目 录 摘 要 III Abstract IV 前 言 1 第一章 绪论 2 1.1 设计的背景和意义 2 1.2 设计的现状和发展 2 1.3 设计的目的与意义 2 第二章 总体设计 4 2.1 总体方案的设计与实现 4 2.1.1 主要设计的内容 4 2.1.2 系统的总体设计 4 2.2 系统方案论证 5 2.2.1 单片机的选择 6 2.2.2…

Java基于微信小程序的电影推荐系统的实现,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

机器学习 Python库 乱记录

MLFlow—模型实验和跟踪 MLflow是一个平台,帮助你从头到尾管理你的机器学习实验,确保可追溯性和可重复性。它提供了一个集中的存储库,用于存储你的代码、数据和模型工件,以及一个跟踪系统,记录你所有的实验&#xff0c…

【Node.js从基础到高级运用】十一、构建RESTful API

在本篇博客中,我们将综合之前讨论的内容,深入探索如何使用Node.js构建一个RESTful API。我们将重点讨论设计合理的API端点,展示如何通过代码实现这些端点,并指导如何使用Postman测试我们的API,确保其按预期工作。 前提…

Python-sklearn-diabetes项目实战

目录 1 下载数据集和预处理 1.1 加载/下载数据集 1.2 数据可视化 1.3 数据清洗 1.4 特征工程 1.5 构建特征集和标签集 1.6 拆分训练集和测试集 2 训练模型 2.1 选择算法和确定模型 2.2 训练拟合模型 3 评估并优化模型性能 本文以糖尿病数据集diabetes为基础进行线性…

Spring Cloud Gateway如何实现熔断

Spring Cloud Gateway熔断集成 熔断应用: 金融市场中的熔断机制:在金融交易系统中,熔断机制(Circuit Breaker)是一种市场保护措施,旨在预防市场剧烈波动时可能导致的系统性风险。当某个基准指数&#xff08…

【微服务-Nacos】Nacos集群的工作原理及集群间数据同步过程

上篇文章我们介绍了Nacos集群的搭建方法及步骤,下面我们来看一下Nacos集群的工作原理,一共有两部分:Leader节点选举及各节点数据同步。 1、Nacos集群中Leader节点是如何产生的 Nacos集群采用了Raft算法实现。它是一种比较简单的选举算法&am…

【javaWeb】在webapp中手动发布一个应用

标题 🐲一、为什么要在webapp中手动发布一个应用🎉二、手动发布步骤1.下载Tomcat2.解压并安装3.在webapps中创建文档 ✨三、总结 🐲一、为什么要在webapp中手动发布一个应用 好处解释灵活性手动发布应用程序可以根据自己的需求进行自定义配置…

Abaqus三维梯度泰森多边形插件:Voronoi FGM 3D(Mesh)- AbyssFish

插件介绍 Voronoi FGM 3D (Mesh) V1.0 - AbyssFish 插件可在Abaqus软件内生成梯度分布的三维泰森多边形长方体模型。插件可用于梯度功能材料(Functionally Gradient Materials)、梯度纳米金属材料、梯度金属结构等梯度晶体模型的建立。模型基于背景网格实现,通过单…

YOLO_项目环境配置

YOLOv5官方项目地址 https://github.com/ultralytics/yolov5 下载 5.0和1.0源码 5.0 master-Tags-v5.0 Code-Download.ZIP 切换到1.0下载 解压缩提取 打开V5.0 使用Pycharm打开V5.0的文件夹 环境配置 参考 http://t.csdnimg.cn/Zdfh2 http://t.csdnimg.cn/Nqkwr 然后在Pyc…