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、单片机、软…...
3个核心功能让Windows优化变得如此简单:Winhance中文版深度体验
3个核心功能让Windows优化变得如此简单:Winhance中文版深度体验 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Wi…...
从ULN2803芯片内部拆解,聊聊三极管“黄金搭档”达林顿管到底强在哪?
ULN2803芯片拆解:达林顿管如何成为三极管的“黄金搭档”? 当我们需要用单片机的微弱IO口信号(通常只有几毫安)驱动继电器、电机这类“大胃王”负载时,就像试图用一根吸管给游泳池注水——理论可行,实际效率…...
NCCL中RoCE与RDMA的深度解析:如何优化分布式训练网络性能
1. 为什么RoCE和RDMA对分布式训练如此重要? 第一次接触分布式训练时,我盯着日志里不断跳动的通信耗时直发愁。8块GPU明明都在满负荷运转,但总训练时间就是比单卡8要长不少。后来用NVIDIA的Nsight工具一分析,发现超过30%的时间都花…...
颠覆传统游戏体验:Sunshine云游戏串流平台让你随时随地畅玩PC游戏
颠覆传统游戏体验:Sunshine云游戏串流平台让你随时随地畅玩PC游戏 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾梦想过在旅途中用平板继续昨晚未完成的3A大作…...
CentOS 7.9 上部署 ELK 9.2.0 踩坑实录:从系统优化到证书配置的完整避坑指南
CentOS 7.9 上部署 ELK 9.2.0 实战指南:系统调优与安全配置全解析 在当今数据驱动的时代,企业日志管理已成为运维工作的核心环节。ELK Stack(Elasticsearch、Logstash、Kibana)作为开源日志分析解决方案的标杆,其9.2.0…...
Kubernetes 环境下 SkyWalking 的高效部署与性能调优
1. Kubernetes 环境下的 SkyWalking 部署实战 第一次在 Kubernetes 上部署 SkyWalking 时,我踩了不少坑。记得当时为了调试一个存储配置问题,整整熬了两个通宵。现在回想起来,如果当时有人能给我一份详细的实战指南,至少能节省 80…...
LeetCode 热题 100 之 131. 分割回文串 51. N 皇后
131. 分割回文串 51. N 皇后 131. 分割回文串 class Solution {public List<List<String>> partition(String s) {List<List<String>> res new ArrayList<>();List<String> path new ArrayList<>();backtrack(s, 0, path, res);re…...
AI动画创作新范式:Krita插件驱动的动态视觉叙事解决方案
AI动画创作新范式:Krita插件驱动的动态视觉叙事解决方案 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项目地址: https://gitco…...
手把手教你用Python实现熵权PCA:从数据清洗到可视化,一个案例全讲透
用Python实战熵权PCA:电商商品竞争力分析全流程解析 在电商平台的海量商品中,如何快速识别出真正具有竞争力的产品?传统的人工筛选方式不仅效率低下,还容易受到主观偏见的影响。本文将带你用Python实现一个完整的熵权PCA分析流程&…...
Qwen3-VL-8B效果惊艳展示:识别电路图并解释工作原理与元器件作用
Qwen3-VL-8B效果惊艳展示:识别电路图并解释工作原理与元器件作用 1. 视觉语言模型的电路理解突破 Qwen3-VL-8B作为新一代多模态大模型,在电路图识别和理解方面展现出了令人惊艳的能力。传统的文本模型只能处理文字描述,而Qwen3-VL-8B能够直…...
