Django 使用Apscheduler执行定时任务
Apscheduler 介绍
核心组件: 调度器、作业存储、执行器、触发器
调度器
BlockingScheduler
阻塞的调度器,适用于脚本
BackgroundScheduler
后台调度器,适用于非阻塞的应用如Web应用
AsyncIOScheduler
适用于 asyncio 的调度器
GeventScheduler
适用于 Gevent 的调度器
TornadoScheduler
适用于 Tornado 的调度器
TwistedScheduler
适用于 Twisted 的调度器。
作业存储
保存作业的地方,默认是使用 内存存储,也可以持久化到数据库,支持redis、mongdb等
执行器
执行作业的工具,默认是ThreadPoolExecutor和ProcessPoolExecutor,也就是线程池和进程池
触发器
确定何时运行作业,主要有三种:date、interval、cron
date
在特定时间点运行一次,也就只运行一次
interval
按指定间隔运行,例如每五秒运行
cron
可支持复杂的规格,例如每天某个时间点执行,每周一执行等
更多详细介绍请转到官网
基本用法
1.创建调度器
from apscheduler.schedulers.background import BackgroundSchedulerscheduler = BackgroundScheduler()
2.具体的定时任务方法
def job_function(**kwargs):print(kwargs.get("name", "没有传递名称"))print(f"定时任务执行了:{kwargs.get('执行时间', datetime.now())}")
3.设置触发器
# scheduler.add_job(job_function, 'date', kwargs={"name": "张三", }, **{"run_date": datetime.now() + timedelta(seconds=1)})scheduler.add_job(job_function, 'interval', seconds=2)# scheduler.add_job(job_function, 'cron', **{"start_date": "2024-06-18 10:38:00", "end_date": "2024-06-18 10:38:20", "second": "*/2"})
4.运行定时任务
scheduler.start()
整体代码
from datetime import datetime
from apscheduler.schedulers.background import BackgroundSchedulerdef job_function(**kwargs):print(kwargs.get("name", "没有传递名称"))print(f"定时任务执行了:{kwargs.get('执行时间', datetime.now())}")scheduler = BackgroundScheduler()
# scheduler.add_job(job_function, 'date', kwargs={"name": "张三", }, **{"run_date": datetime.now() + timedelta(seconds=1)})# scheduler.add_job(job_function, 'interval', seconds=2)# scheduler.add_job(job_function, 'cron', **{"start_date": "2024-06-18 10:38:00", "end_date": "2024-06-18 10:38:20", "second": "*/2"})scheduler.add_job(job_function, 'cron', )
# scheduler.add_job(job_function, 'cron', **{"start_date": "2024-06-18 10:38:00", "end_date": "2024-06-18 10:38:20", "second": "*/2"})scheduler.start()while True:pass
触发器常用规则
可以使用对应的trigger对象进行建立对应的规则,也可以直接用简写方式
trigger对象
from apscheduler.triggers.date import DateTrigger
from apscheduler.triggers.interval import IntervalTrigger
from apscheduler.triggers.cron import CronTrigger
因为这些写法相对繁琐,博主更推荐用简写方式,所以就不详解展开介绍对象写法,就简单给出几个例子
sched.add_job(job_function, trigger=DateTrigger(run_date=datetime(2023, 10, 1, 10, 30)))
sched.add_job(job_function, trigger=IntervalTrigger(hours=2))
sched.add_job(job_function, trigger=CronTrigger(day_of_week='mon', hour='8,12', minute='30'))
add_job 可接收的参数
func, trigger=None, args=None, kwargs=None, id=None, name=None,
misfire_grace_time=undefined, coalesce=undefined, max_instances=undefined,
next_run_time=undefined, jobstore='default', executor='default',
replace_existing=False, **trigger_args
func 要运行的函数对象,注意是函数对象,不是函数名
args和kwargs是传递给需要执行函数的参数
**trigger_args 才是给触发器设置规则的参数
date 支持的规则
可以传入一个时间对象,或者是满足时间格式的字符串
时间对象:datetime.now()
scheduler.add_job(job_function, 'date', kwargs={"name": "张三",}, **{"run_date": datetime.now() + timedelta(seconds=1)})
效果:在当前时间再加一秒后执行
字符串:2024-06-18 10:02:00
scheduler.add_job(job_function, 'date', kwargs={"name": "张三",}, **{"run_date": "2024-06-18 10:02:00"})
效果:在2024-06-18 10:02:00执行
interval 支持的规则
weeks (int) – 间隔几周
days (int) – 间隔几天
hours (int) – 间隔几小时
minutes (int) – 间隔几分钟
seconds (int) – 间隔多少秒
start_date (datetime|str) – 开始日期
end_date (datetime|str) – 结束日期
timezone (datetime.tzinfo|str) – 时区
间隔*秒后执行
scheduler.add_job(job_function, 'interval', seconds=2)
效果:每两秒执行一次
cron 支持的规则
(int|str) 表示参数既可以是int类型,也可以是str类型
(datetime | str) 表示参数既可以是datetime类型,也可以是str类型
year (int|str) – 4-digit year -(表示四位数的年份,如2008年)
month (int|str) – month (1-12) -(表示取值范围为1-12月)
day (int|str) – day of the (1-31) -(表示取值范围为1-31日)
week (int|str) – ISO week (1-53) -(格里历2006年12月31日可以写成2006年-W52-7(扩展形式)或2006W527(紧凑形式))
day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun) - (表示一周中的第几天,既可以用0-6表示也可以用其英语缩写表示)
hour (int|str) – hour (0-23) - (表示取值范围为0-23时)
minute (int|str) – minute (0-59) - (表示取值范围为0-59分)
second (int|str) – second (0-59) - (表示取值范围为0-59秒)
start_date (datetime|str) – earliest possible date/time to trigger on (inclusive) - (表示开始时间)
end_date (datetime|str) – latest possible date/time to trigger on (inclusive) - (表示结束时间)
timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations (defaults to scheduler timezone) -(表示时区取值)
每周几执行
可以填写 0-6 或者 mon,tue.wed,thu,fri,sat,sun
scheduler.add_job(job_function, 'cron',**{"day_of_week": "mon"})
效果:每周一执行
每天固定时间执行
scheduler.add_job(job_function, 'cron',**{ hour='8, 12', minute='30'})
效果:每天早上8点30分和中午12点和30分运执行
每天时间范围内执行
scheduler.add_job(job_function, 'cron', **{"start_date": "2024-06-18 10:38:00", "end_date": "2024-06-18 10:38:20", "second": "*/2"})
效果:每天 2024-06-18 10:38:00 开始执行至2024-06-18 10:38:20 且每2秒执行一次
相关文章:
Django 使用Apscheduler执行定时任务
Apscheduler 介绍 核心组件: 调度器、作业存储、执行器、触发器 调度器 BlockingScheduler 阻塞的调度器,适用于脚本 BackgroundScheduler 后台调度器,适用于非阻塞的应用如Web应用 AsyncIOScheduler 适用于 asyncio 的调度器 GeventSchedu…...
Shopee API接口:获取搜索栏生成的商品结果列表
一、引言 此接口可以高效获取搜索栏生成的商品结果列表。本文将详细介绍这一核心功能,并探讨其在实际应用中的价值。 二、核心功能介绍——获取搜索栏生成的商品结果列表 请求API及返回示例 http://api.xxxx.com/sp/ll/search/item?keywordiphone&page1&am…...
选择门店收银系统要考虑哪些方面?美业系统Java源码分享私
开店前的一个重要事件就是选择门店收银软件/系统,尤其是针对美容、医美等美业门店,一个优秀专业的系统十分重要,它必须贴合门店的经营需求,提供更全面、便捷、高效的管理功能,帮助提升门店的服务质量和经营效益。 以下…...
智慧养老的养老方式及其技术实现与趋势
智慧养老是一种借助现代信息技术手段,为老年人提供更高效、便捷、个性化服务的养老模式。以下是一些常见的智慧养老方式: 1. 远程健康监测系统 通过智能穿戴设备,如手环、手表等,实时收集老年人的生理数据,如心率、血…...
思维导图之计算机网络整体框架
高清自行访问:计算机网络整体框架 (yuque.com)...
P7771 【模板】欧拉路径
网址如下: P7771 【模板】欧拉路径 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 忘掉了输出欧拉回路的方法,搞了我好久 关于欧拉回路的知识可以看我之前的博客: 一点关于欧拉回路的总结-CSDN博客 代码如下: #include<q…...
卷积神经网络(CNN)理解
1、引言(卷积概念) 在介绍CNN中卷积概念之前,先介绍一个数字图像中“边缘检测edge detection”案例,以加深对卷积的认识。图中为大小8X8的灰度图片,图片中数值表示该像素的灰度值。像素值越大,颜色越亮&…...
Databend 开源周报第 149 期
Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 支持递归公共表…...
Hue Hadoop 图形化用户界面 BYD
软件简介 Hue 是运营和开发 Hadoop 应用的图形化用户界面。Hue 程序被整合到一个类似桌面的环境,以 web 程序的形式发布,对于单独的用户来说不需要额外的安装。...
【经验分享】RT600 serial boot mode测试
【经验分享】RT600 serial boot mode测试 一, 文档描述二, Serial boot mode测试2.1 evkmimxrt685_gpio_led_output 工程测试2.2 evkmimxrt685_dsp_hello_world_usart_cm33工程测试 一, 文档描述 RT600的启动模式共支持4种: 1&am…...
七种不同类型测宽仪技术参数 看看哪种能用于您的产线?
在线测宽仪种类众多,原理不同,产品不同,型号不同,其技术参数也各不相同。不同的测量范围与测量精度,适用于不同规格的板材,看看您的板材能适用于哪种范围。 1、单测头平行光测宽仪 点光源发射的光经过发射…...
【GO】rotatelogs库和sirupsen/logrus库实现日志功能的实践用例
“github.com/sirupsen/logrus” 是一个 Go 语言的日志库,它提供了一种简单、灵活的方式来记录日志。该库的主要特点包括: 支持多种日志输出目标,如控制台、文件等。 支持日志轮转,可以按照时间或文件大小进行轮转。 支持日志格式…...
Arc2Face - 一张图生成逼真的多风格人脸,本地一键整合包下载
Arc2Face是用于人脸的基础模型训练,可批量生成超高质量主题的AI人脸艺术风格照,完美复制人脸。只需一张照片,几秒钟,即可批量生成超高质量主题的AI人脸艺术风格照,完美复制人脸。 Arc2Face 是一个创新的开源项目&…...
swiper 幻灯片
index.html <!DOCTYPE html> <html lang"en"> <head> <meta charset"utf-8"> <title>swiper全屏响应式幻灯片代码</title> <meta name"viewport" content"widthdevice-width, initial-scale1, min…...
Ubuntu 使用Vscode的一些技巧 ROS
Ubuntu VSCode的一些设置(ROS) 导入工作空间 推荐只导入工作空间下的src目录 如果将整个工作空间导入VSCode,那么这个src就变成了次级目录,容易在写程序的时候把本应该添加到具体工程src目录里的代码文件给误添加到这个catkin_w…...
JS中的三种事件模型
JavaScript 中的事件模型主要有三种: 传统事件模型(DOM Level 0)标准事件模型(DOM Level 2)IE 事件模型(非标准,仅限于旧版本的 Internet Explorer) 下面分别介绍这三种事件模型&…...
南京邮电大学计算机网络实验二(网络路由器配置RIP协议)
文章目录 一、 实验目的和要求二、 实验环境(实验设备)三、 实验步骤四、实验小结(包括问题和解决方法、心得体会、意见与建议等)五、报告资源 一、 实验目的和要求 掌握思科路由器的运行过程,掌握思科路由器的硬件连线与接口,掌…...
仓颉语言的编译和构建
一、cjc 使用 cjc是仓颉编程语言的编译命令,其提供了丰富的功能及对应的编译选项,本章将对基本使用方法进行介绍。 cjc-frontend (仓颉前端编译器)会随 cjc 一起通过 Cangjie SDK 提供,cjc-frontend 能够将仓颉源码编…...
网络基础-协议
一、ARP 通过IP得到Mac 首先会查看缓存的arp表中是否有相应的IP和Mac对应关系,如果有直接进行包封装。如果没有则进行广播当对应的地址就收到广播包后会根据arp中的源地址进行单播返回相应的IP和Mac对应关系。 arp -a 查看现有的arp缓存 二、RARP反向地址解析 通过…...
电子设备抗震等级与电子设备震动实验
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139923445 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
