接着上期代码内容,继续完善优化系统功能。

本次增加配置定时调度任务功能,学习任务系统定时任务管理添加的定时学习任务,需要通过配置调度任务,定时发布周期性的学习任务。

以及每天定时发送学生用户属性值,积分值等信息到学生用户知晓。以及其他需要定时调度的任务都可以配置到定时任务中,方便及时提醒自己。

第一步:熟悉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实战项目-学习任务系统-配置定时调度任务的更多相关文章

  1. Java学习笔记 -- Java定时调度工具Timer类

    1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...

  2. 01-Flutter移动电商实战-项目学习记录

    一直想系统性的学习一下 Flutter,正好看到该课程<Flutter移动电商实战>的百度云资源,共 69 课时,由于怕自己坚持不下去(经常学着学着就不学了),故采用博客监督以记之. 1. ...

  3. Django ---- blog项目学习所得

    一.登录功能 1.采用ajax 提交form表单的方式 2.后台生成随机验证码,登录时提交验证码 3.用PLI库生成随机验证码,置于session中,登录时与前台提交的code进行upeer()的验证 ...

  4. Django之项目搭建和配置总结(一)

    安装和创建虚拟环境 参考:linux系统下Python虚拟环境的安装和使用 安装Django包 先进入虚拟环境,在联网下执行: pip install django==1.8.7 1.8.7表示dja ...

  5. SpringMVC+Mybatis+Mysql实战项目学习--环境搭建

    1.开发IDE:Spring Tool Suite(自带maven插件) 下载地址https://spring.io/tools/sts/all 在STS.ini配置信息中加下面一行 保证编码格式为u ...

  6. Node.js实战项目学习系列(1) 初识Node.js

    前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...

  7. Node.js实战项目学习系列(2) 开发环境和调试工具

    前言 上一节让我们对Node.js有一个初步的了解,那么现在可以开始正式学习下Node.js的开发了,但是任何一门语言要设计到开发,就必须先学习开发环境以及调试.本文将主要讲解这些内容. 本文涉及到的 ...

  8. Node.js实战项目学习系列(4) node 对象(global、process进程、debug调试)

    前言 在之前的课程我们学习了Node的模块化规则,接下来我们将学习下 Node的几个新特性:global ,process进程,debug调试 global 跟在浏览器中的window一样都是全局变量 ...

  9. Node.js实战项目学习系列(5) node基础模块 path

    前言 前面已经学习了很多跟Node相关的知识,譬如开发环境.CommonJs,那么从现在开始要正式学习node的基本模块了,开始node编程之旅了. path path 模块提供用于处理文件路径和目录 ...

  10. 通过Quartz 配置定时调度任务:使用cron表达式配置时间点

    Cron官网入口 在后台经常需要一些定时处理的任务,比如微信相关应用所需的access_token,就要定时刷新,官方返回的有效性是7200s,也就是2小时,但是为了保险起见,除了在发现access_ ...

随机推荐

  1. Qt音视频开发系列文章导航

    文章 链接 1-vlc解码播放 https://qtchina.blog.csdn.net/article/details/107742836 2-vlc回调处理 https://qtchina.bl ...

  2. Transformer总结

    Contents Attention OverallSurvey NLP Language Speech CV Backbone_Classification Self-Supervised Inte ...

  3. Java方法引用、lambda如何序列化&方法引用与lambda底层原理

    系列文章目录和关于我 0.引入 最近笔者使用flink实现一些实时数据清洗(从kafka清洗数据写入到clickhouse)的功能,在编写flink作业后进行上传,发现运行的时候抛出:java.io. ...

  4. 创建多线程的方式二:实现Runnable接口

      /** * 创建多线程的方式二:实现Runnable接口 * 1. 创建一个实现了Runnable接口的类 * 2. 实现类去实现Runnable中的抽象方法:run() * 3. 创建实现类的对 ...

  5. 混元API的加密机制与原生集成实战

    今天,我们将重点讨论在对接混元大模型时需要特别关注的几个要点.首先,最为关键的一点是,混元大模型的加密方式相比于其他大模型更为复杂和严密.在对接过程中,我们通常避免使用混元官方提供的SDK进行集成,主 ...

  6. VMware的快照原理

    本文分享自天翼云开发者社区<VMware的快照原理>,作者:m****n VMware的快照是基于数据块的快照.快照也是以一个文件方式存在的,缺省位置和虚拟机在同一目录下,它是一个Delt ...

  7. 利用Python开发Exporter,集成Prometheus和Grafana对进程监控

    利用Python开发Exporter,集成Prometheus和Grafana对进程监控 在现代软件开发和运维中,监控是确保系统稳定运行和快速响应问题的重要手段.Prometheus和Grafana的 ...

  8. CSP 2024 游记

    初赛 Day -1 唐,rp--了. 上午语文正卷满分,然后作文挂完了靠.我没想到我作文能挂到 40pts. 吃饭的时候 gcy 说了什么奇怪的东西,然后喷饭爆金币了,社死现场.吃饭的时候还 tm 咬 ...

  9. SQLServer--NOLOCK

    介绍 NOLOCK从字面意思可以看出就是没有锁,表示这段sql不去考虑目前table的transaction lock,就是说加上NOLOCK后不受锁的限制读取数据,包括已修改未提交的数据,概念上类似 ...

  10. RabbitMQ(十)——消息优先级

    RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...