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

Django 使用Apscheduler执行定时任务

APScheduler是一个轻量级的Python库,用于调度作业(运行定时任务)。在Django中使用APScheduler,你可以设置定时任务,比如每天定时发送报告,或者定时清理无效数据。

以下是一个简单的例子,展示如何在Django项目中使用APScheduler:

1.首先,安装APScheduler:

pip install apscheduler

2.在Django应用中创建一个任务文件,例如jobs.py:

from apscheduler.schedulers.background import BackgroundScheduler
import datetimedef my_job():print(f"任务执行:{datetime.datetime.now()}")# 创建调度器
scheduler = BackgroundScheduler()
# 添加任务
scheduler.add_job(my_job, 'interval', minutes=1)
# 启动调度器
scheduler.start()

3.在Django的apps.py中启动调度器,确保在Django启动时任务能被加载:

from django.apps import AppConfig
from .jobs import schedulerclass MyAppConfig(AppConfig):name = 'my_app'def ready(self):# 当Django应用就绪时,启动调度器scheduler.start()

4.在__init__.py中设置AppConfig:

default_app_config = 'my_app.apps.MyAppConfig'

确保你的Django应用的名字替换成你实际的应用名。

以上代码将每分钟执行一次my_job函数。你可以根据需要调整任务的触发方式(例如,改变为每天或每小时一次)。记得在生产环境中部署时,确保调度器的启动逻辑只在一个进程中执行,避免多个进程执行相同任务的问题。

5.代码结构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.代码优化:重复执行任务

INSTALLED_APPS = (# ..."django_apscheduler",
)
django_apscheduler_djangojob 表保存注册的任务以及下次执行的时间django_apscheduler_djangojobexecution 保存每次任务执行的时间和结果和任务状态

在这里插入图片描述

# views.py
from django_apscheduler.jobstores import DjangoJobStore, register_jobfrom apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetimescheduler = BlockingScheduler()  # 创建调度器
scheduler.add_jobstore(DjangoJobStore(), "default")# 添加定时任务方式一
@register_job(scheduler, "interval", seconds=5, id="func", replace_existing=True, misfire_grace_time=120)
def job():print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))# 添加定时任务方式二
def job1():print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))scheduler.add_job(job1,'interval',seconds=5,id='my_job',  # 任务的唯一标识replace_existing=True,
)scheduler.start()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大数据-118 - Flink DataSet 基本介绍 核心特性 创建、转换、输出等
  • 在BrowserStack上进行自动化爬虫测试的终极指南
  • Java项目: 基于SpringBoot+mysql高校心理教育辅导管理系统分前后台(含源码+数据库+开题报告+毕业论文)
  • 关于edge浏览器登陆CSDN安全验证不跳出验证码
  • Linux--基础知识点--0--面试
  • C++11(1)
  • 力扣刷题(4)
  • 日系编曲:日系架子鼓写作思路 支点音符 幽灵音 抢拍(重音移位)半速与倍速
  • Kotlin 范型之协变、逆变、不变
  • Springboot-文件的上传和下载
  • 解析 MySQL 数据库的 Python 接口:`mysqlclient` 与 `django-mysql` 实战指南20240904
  • ArcGIS展线/投线教程
  • idea 编译断点运行 tomcat 10.1.28 源码
  • redis的一些重要的基础知识
  • onvif应用--IPC鉴权(认证)
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • C++类中的特殊成员函数
  • CentOS7简单部署NFS
  • express如何解决request entity too large问题
  • Hibernate【inverse和cascade属性】知识要点
  • markdown编辑器简评
  • nginx 配置多 域名 + 多 https
  • PhantomJS 安装
  • Redis学习笔记 - pipline(流水线、管道)
  • Selenium实战教程系列(二)---元素定位
  • SOFAMosn配置模型
  • vue中实现单选
  • 如何编写一个可升级的智能合约
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 三分钟教你同步 Visual Studio Code 设置
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $L^p$ 调和函数恒为零
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (70min)字节暑假实习二面(已挂)
  • (web自动化测试+python)1
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)Linux——Linux常用指令
  • (二开)Flink 修改源码拓展 SQL 语法
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (循环依赖问题)学习spring的第九天
  • (转)h264中avc和flv数据的解析
  • (转)IOS中获取各种文件的目录路径的方法
  • (自用)网络编程
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Standard 的管理策略
  • .NET/C# 使窗口永不获得焦点
  • .net反编译工具
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • @Bean有哪些属性
  • @Bean注解详解
  • @Builder注释导致@RequestBody的前端json反序列化失败,HTTP400
  • @Valid和@NotNull字段校验使用