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

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 【模板】欧拉路径

网址如下&#xff1a; P7771 【模板】欧拉路径 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 忘掉了输出欧拉回路的方法&#xff0c;搞了我好久 关于欧拉回路的知识可以看我之前的博客&#xff1a; 一点关于欧拉回路的总结-CSDN博客 代码如下&#xff1a; #include<q…...

卷积神经网络(CNN)理解

1、引言&#xff08;卷积概念&#xff09; 在介绍CNN中卷积概念之前&#xff0c;先介绍一个数字图像中“边缘检测edge detection”案例&#xff0c;以加深对卷积的认识。图中为大小8X8的灰度图片&#xff0c;图片中数值表示该像素的灰度值。像素值越大&#xff0c;颜色越亮&…...

Databend 开源周报第 149 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持递归公共表…...

Hue Hadoop 图形化用户界面 BYD

软件简介 Hue 是运营和开发 Hadoop 应用的图形化用户界面。Hue 程序被整合到一个类似桌面的环境&#xff0c;以 web 程序的形式发布&#xff0c;对于单独的用户来说不需要额外的安装。...

【经验分享】RT600 serial boot mode测试

【经验分享】RT600 serial boot mode测试 一&#xff0c; 文档描述二&#xff0c; Serial boot mode测试2.1 evkmimxrt685_gpio_led_output 工程测试2.2 evkmimxrt685_dsp_hello_world_usart_cm33工程测试 一&#xff0c; 文档描述 RT600的启动模式共支持4种&#xff1a; 1&am…...

七种不同类型测宽仪技术参数 看看哪种能用于您的产线?

在线测宽仪种类众多&#xff0c;原理不同&#xff0c;产品不同&#xff0c;型号不同&#xff0c;其技术参数也各不相同。不同的测量范围与测量精度&#xff0c;适用于不同规格的板材&#xff0c;看看您的板材能适用于哪种范围。 1、单测头平行光测宽仪 点光源发射的光经过发射…...

【GO】rotatelogs库和sirupsen/logrus库实现日志功能的实践用例

“github.com/sirupsen/logrus” 是一个 Go 语言的日志库&#xff0c;它提供了一种简单、灵活的方式来记录日志。该库的主要特点包括&#xff1a; 支持多种日志输出目标&#xff0c;如控制台、文件等。 支持日志轮转&#xff0c;可以按照时间或文件大小进行轮转。 支持日志格式…...

Arc2Face - 一张图生成逼真的多风格人脸,本地一键整合包下载

Arc2Face是用于人脸的基础模型训练&#xff0c;可批量生成超高质量主题的AI人脸艺术风格照&#xff0c;完美复制人脸。只需一张照片&#xff0c;几秒钟&#xff0c;即可批量生成超高质量主题的AI人脸艺术风格照&#xff0c;完美复制人脸。 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的一些设置&#xff08;ROS&#xff09; 导入工作空间 推荐只导入工作空间下的src目录 如果将整个工作空间导入VSCode&#xff0c;那么这个src就变成了次级目录&#xff0c;容易在写程序的时候把本应该添加到具体工程src目录里的代码文件给误添加到这个catkin_w…...

JS中的三种事件模型

JavaScript 中的事件模型主要有三种&#xff1a; 传统事件模型&#xff08;DOM Level 0&#xff09;标准事件模型&#xff08;DOM Level 2&#xff09;IE 事件模型&#xff08;非标准&#xff0c;仅限于旧版本的 Internet Explorer&#xff09; 下面分别介绍这三种事件模型&…...

南京邮电大学计算机网络实验二(网络路由器配置RIP协议)

文章目录 一、 实验目的和要求二、 实验环境(实验设备)三、 实验步骤四、实验小结&#xff08;包括问题和解决方法、心得体会、意见与建议等&#xff09;五、报告资源 一、 实验目的和要求 掌握思科路由器的运行过程&#xff0c;掌握思科路由器的硬件连线与接口&#xff0c;掌…...

仓颉语言的编译和构建

一、cjc 使用 cjc是仓颉编程语言的编译命令&#xff0c;其提供了丰富的功能及对应的编译选项&#xff0c;本章将对基本使用方法进行介绍。 cjc-frontend &#xff08;仓颉前端编译器&#xff09;会随 cjc 一起通过 Cangjie SDK 提供&#xff0c;cjc-frontend 能够将仓颉源码编…...

网络基础-协议

一、ARP 通过IP得到Mac 首先会查看缓存的arp表中是否有相应的IP和Mac对应关系&#xff0c;如果有直接进行包封装。如果没有则进行广播当对应的地址就收到广播包后会根据arp中的源地址进行单播返回相应的IP和Mac对应关系。 arp -a 查看现有的arp缓存 二、RARP反向地址解析 通过…...

电子设备抗震等级与电子设备震动实验

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139923445 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…...

3个核心功能让Windows优化变得如此简单:Winhance中文版深度体验

3个核心功能让Windows优化变得如此简单&#xff1a;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芯片拆解&#xff1a;达林顿管如何成为三极管的“黄金搭档”&#xff1f; 当我们需要用单片机的微弱IO口信号&#xff08;通常只有几毫安&#xff09;驱动继电器、电机这类“大胃王”负载时&#xff0c;就像试图用一根吸管给游泳池注水——理论可行&#xff0c;实际效率…...

NCCL中RoCE与RDMA的深度解析:如何优化分布式训练网络性能

1. 为什么RoCE和RDMA对分布式训练如此重要&#xff1f; 第一次接触分布式训练时&#xff0c;我盯着日志里不断跳动的通信耗时直发愁。8块GPU明明都在满负荷运转&#xff0c;但总训练时间就是比单卡8要长不少。后来用NVIDIA的Nsight工具一分析&#xff0c;发现超过30%的时间都花…...

颠覆传统游戏体验:Sunshine云游戏串流平台让你随时随地畅玩PC游戏

颠覆传统游戏体验&#xff1a;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 实战指南&#xff1a;系统调优与安全配置全解析 在当今数据驱动的时代&#xff0c;企业日志管理已成为运维工作的核心环节。ELK Stack&#xff08;Elasticsearch、Logstash、Kibana&#xff09;作为开源日志分析解决方案的标杆&#xff0c;其9.2.0…...

Kubernetes 环境下 SkyWalking 的高效部署与性能调优

1. Kubernetes 环境下的 SkyWalking 部署实战 第一次在 Kubernetes 上部署 SkyWalking 时&#xff0c;我踩了不少坑。记得当时为了调试一个存储配置问题&#xff0c;整整熬了两个通宵。现在回想起来&#xff0c;如果当时有人能给我一份详细的实战指南&#xff0c;至少能节省 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动画创作新范式&#xff1a;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&#xff1a;电商商品竞争力分析全流程解析 在电商平台的海量商品中&#xff0c;如何快速识别出真正具有竞争力的产品&#xff1f;传统的人工筛选方式不仅效率低下&#xff0c;还容易受到主观偏见的影响。本文将带你用Python实现一个完整的熵权PCA分析流程&…...

Qwen3-VL-8B效果惊艳展示:识别电路图并解释工作原理与元器件作用

Qwen3-VL-8B效果惊艳展示&#xff1a;识别电路图并解释工作原理与元器件作用 1. 视觉语言模型的电路理解突破 Qwen3-VL-8B作为新一代多模态大模型&#xff0c;在电路图识别和理解方面展现出了令人惊艳的能力。传统的文本模型只能处理文字描述&#xff0c;而Qwen3-VL-8B能够直…...