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实战项目-学习任务系统-配置定时调度任务_第1张图片

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定时器参数解释

Django实战项目-学习任务系统-配置定时调度任务_第2张图片

# 添加定时任务,第一个参数为需要定时执行的任务,'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定时器参数解释

Django实战项目-学习任务系统-配置定时调度任务_第3张图片

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

7,date定时器参数解释

Django实战项目-学习任务系统-配置定时调度任务_第4张图片

 

# 添加定时任务,第一个参数为需要定时执行的任务,'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,定时发邮件通知,查看最新用户属性信息

Django实战项目-学习任务系统-配置定时调度任务_第5张图片

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

Django实战项目-学习任务系统-配置定时调度任务_第6张图片

 -------------------------------------------------end -------------------------------------------------

你可能感兴趣的:(Python,学习,python,django)