Django实战项目-学习任务系统-配置定时调度任务
接着上期代码内容,继续完善优化系统功能。
本次增加配置定时调度任务功能,学习任务系统定时任务管理添加的定时学习任务,需要通过配置调度任务,定时发布周期性的学习任务。
以及每天定时发送学生用户属性值,积分值等信息到学生用户知晓。以及其他需要定时调度的任务都可以配置到定时任务中,方便及时提醒自己。
第一步:熟悉Django框架的apscheduler模块
Django-apscheduler是一个基于apscheduler库的Python定时任务调度库,可用于轻松执行定时任务。
它支持三种不同的调度方式:固定时间间隔、固定时间点(日期)和crontab命令。
使用django-apscheduler,您可以轻松设置和管理定时任务,以在预定的时间执行特定的操作。
1,django-apscheduler安装
pip install django-apscheduler
2,修改django项目配置文件
./mysite/mysite/settings.py:
setting.py配置文件的INSTALLED_APPSl里面进行注册
INSTALLED_APPS = (
# ... ...
"django_apscheduler",
)
3,数据迁移
python manage.py migrate
#迁移完成后数据库会创建如下两张表
django_apscheduler_djangojob
django_apscheduler_djangojobexecution
django_apscheduler_djangojob表,用于存储定时任务。

django_apscheduler_djangojobexecution表,用于存储每次的执行记录、执行的时长和执行结果等。
status: 执行状态duration: 执行了多久exception: 是否出现异常

4,简单使用定时器
在views.py中编写代码,当django启动时会自动创建定时任务,或者也可以写在urls.py文件中。
from apscheduler.schedulers.background import BackgroundScheduler def scheduler_test():
print('定时任务触发') # BlockingScheduler() 调度器在主线程中执行, 阻塞当前线程。
# scheduler = BlockingScheduler() # BackgroundScheduler() 调度器在后台执行,不会阻塞当前进程,一般情况使用此方法。
scheduler = BackgroundScheduler try:
# 添加定时任务,第一个参数为需要定时执行的任务,'cron'定时任务类型,每天0点,30分执行一次,任务id为test。
scheduler.add_job(scheduler_test, 'cron', hour=0, minute=30, id='test', replace_existing=True, timezone='Asia/Shanghai')
# 启动定时任务
scheduler.start()
except Exception as e:
print(e)
# 停止定时任务
scheduler.shutdown()
注意:在创建定时任务时,为了确保任务的唯一性和避免重复创建问题,建议指定任务ID。如果没有指定ID,系统会随机生成一个。在多线程环境中,相同任务重复创建的问题可能会更加突出。通过指定ID,当触发add_job时,如果任务已经存在,系统会报错,否则会新创建一个定时任务。这样能够更加高效地管理和执行定时任务。
5,cron定时器参数解释

# 添加定时任务,第一个参数为需要定时执行的任务,'cron'定时任务类型,每天1点,任务id为test。
scheduler.add_job(scheduler_test, 'cron', hour=1, minute=0, id='test', replace_existing=True, timezone='Asia/Shanghai') # 每天9点-17点,每10分钟执行一次。
# scheduler.add_job(create_article_index, 'cron', hour='9-17', minute='0/10', id='test', replace_existing=True, timezone='Asia/Shanghai')
6,interval定时器参数解释

# 添加定时任务,第一个参数为需要定时执行的任务,'interval'定时任务类型,每隔900秒执行一次,任务id为test。
scheduler.add_job(scheduler_test, 'interval', seconds=900, id='test', replace_existing=True, timezone='Asia/Shanghai')
7,date定时器参数解释

# 添加定时任务,第一个参数为需要定时执行的任务,'interval'定时任务类型,2023年7月31日执行一次,任务id为test。
scheduler.add_job(scheduler_test, 'date', run_date=date(2023, 7, 31), id='test', replace_existing=True,timezone='Asia/Shanghai')
8,其他操作
# 删除定时任务
scheduler.remove_job(job_id)
# 暂停定时任务
scheduler.pause_job(job_id)
# 开启定时任务
scheduler.resume_job(job_id)
# 修改定时任务
scheduler.modify_job(job_id)
# 获取所有定时任务
scheduler.get_jobs()
第二步:apscheduler定时任务调度库整合到学习任务系统中
1,编写定时调度任务工具
./mysite/study_system/my_apscheduler.py:
# 更多代码内容请关注weixin公众号: PandaCode辉
2,编写定时任务实现方法
./mysite/study_system/utils.py:
# 更多代码内容请关注weixin公众号: PandaCode辉
第三步:运行测试效果
1,定时发邮件通知,查看最新用户属性信息

2,定时发布学习系统的定时学习任务,同时发邮件通知

-------------------------------------------------end -------------------------------------------------
Django实战项目-学习任务系统-配置定时调度任务的更多相关文章
- Java学习笔记 -- Java定时调度工具Timer类
1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...
- 01-Flutter移动电商实战-项目学习记录
一直想系统性的学习一下 Flutter,正好看到该课程<Flutter移动电商实战>的百度云资源,共 69 课时,由于怕自己坚持不下去(经常学着学着就不学了),故采用博客监督以记之. 1. ...
- Django ---- blog项目学习所得
一.登录功能 1.采用ajax 提交form表单的方式 2.后台生成随机验证码,登录时提交验证码 3.用PLI库生成随机验证码,置于session中,登录时与前台提交的code进行upeer()的验证 ...
- Django之项目搭建和配置总结(一)
安装和创建虚拟环境 参考:linux系统下Python虚拟环境的安装和使用 安装Django包 先进入虚拟环境,在联网下执行: pip install django==1.8.7 1.8.7表示dja ...
- SpringMVC+Mybatis+Mysql实战项目学习--环境搭建
1.开发IDE:Spring Tool Suite(自带maven插件) 下载地址https://spring.io/tools/sts/all 在STS.ini配置信息中加下面一行 保证编码格式为u ...
- Node.js实战项目学习系列(1) 初识Node.js
前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...
- Node.js实战项目学习系列(2) 开发环境和调试工具
前言 上一节让我们对Node.js有一个初步的了解,那么现在可以开始正式学习下Node.js的开发了,但是任何一门语言要设计到开发,就必须先学习开发环境以及调试.本文将主要讲解这些内容. 本文涉及到的 ...
- Node.js实战项目学习系列(4) node 对象(global、process进程、debug调试)
前言 在之前的课程我们学习了Node的模块化规则,接下来我们将学习下 Node的几个新特性:global ,process进程,debug调试 global 跟在浏览器中的window一样都是全局变量 ...
- Node.js实战项目学习系列(5) node基础模块 path
前言 前面已经学习了很多跟Node相关的知识,譬如开发环境.CommonJs,那么从现在开始要正式学习node的基本模块了,开始node编程之旅了. path path 模块提供用于处理文件路径和目录 ...
- 通过Quartz 配置定时调度任务:使用cron表达式配置时间点
Cron官网入口 在后台经常需要一些定时处理的任务,比如微信相关应用所需的access_token,就要定时刷新,官方返回的有效性是7200s,也就是2小时,但是为了保险起见,除了在发现access_ ...
随机推荐
- Ubuntu系统编译opencv4.0以上以及opencv_contrib
一.安装依赖 sudo apt install build-essential cmake libtbb2 libttb-dev libgtk-3-dev sudo apt install ...
- 中间件 vs 过滤器
在 ASP.NET Core 中,中间件(Middleware) 和 过滤器(Filters) 是两种不同的机制,用于处理请求和响应的管道.它们的作用和适用场景有所不同,以下是它们的对比和详细说明: ...
- Final Review - 返回天空的雨滴
目录 Motivations Tricks Conclusions Algorithms And - \[\text{Each moment, now night.} \newcommand{\vct ...
- c# Progress<T>
c# Progress<T> 用于显示进度........主要是利用IProgress<T> 的Report(T)方法: private void BtnDownload_Cl ...
- .NetCore Docker test
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 ...
- 地瓜机器人RDK Studio使用教程
一.RDK Studio简介 不知道大家在使用AI开发板的时候有没有遇到过板子官方镜像占据空间大难以保存,想要的时候找不到?官方示例项目久而久之便难以找寻?首次登陆开发板连接网络还需要准备显示器键盘鼠 ...
- try-catch-finally的使用
/* * 一.异常的处理:抓抛模型 * * 过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象. * 并将此对象抛出. * 一旦抛出对象 ...
- 一个WPF下的虚拟键盘实现
给上位机触摸屏做一个虚拟键盘,这玩意儿不就是一排的网格里面放满button嘛 .说归这样说 依然还是有一堆细节需要你去处理的.不论如何 先画个键盘吧. 简单的从网上找个键盘位图做参照使用 4行Grid ...
- 路由协议过程概述--ospf-01
路由是数据通信网络中最基本的要素.路由信息就是指导报文发送的路径信息,路由的过程就是报文转发的过程. 根据路由目的地的不同,路由可划分为: 网段路由:目的地为网段,IPv4地址子网掩码长度小于32位或 ...
- Windows&Mac解决端口占用问题
Windows解决端口占用问题 1.打开命令窗口(以管理员身份运行) 以管理员方式打开cmd 2.查找所有运行的端口 我这里运行了一个项目127.0.0.1:5000,使用的是5000端口,以此来做示 ...