Django------详解django-apscheduler的使用方法
1.安装模块
pip install django-apscheduler
2.配置
- django自带数据库在pycharm的配置 https://blog.csdn.net/weixin_44200535/article/details/87906800
- INSTALLED_APPS中加入django-apscheduler应用
INSTALLED_APPS = [ ... 'django_apscheduler', ... ]
- 数据迁移
python manage.py migrate
3.查看配置结果
- django_apscheduler_djangojob:用于存储任务的表格 job_state: 我猜是将任务具体的执行代码和参数进行序列化后存在了这里
- django_apscheduler_djangojobexecution:用于存储任务执行状态的表格 status: 执行状态 duration: 执行了多长时间 exception: 是否出现了什么异常
4.使用:在任意view.py中实现代码
import time
from apscheduler.schedulers.background import BackgroundScheduler
from django.shortcuts import render
from django_apscheduler.jobstores import DjangoJobStore, register_job, register_events
from blog.robin_server.paramiko_test import SSHConnection
try: # 实例化调度器 scheduler = BackgroundScheduler() # 调度器使用DjangoJobStore() scheduler.add_jobstore(DjangoJobStore(), "default") # 设置定时任务,选择方式为interval,时间间隔为10s # 另一种方式为每天固定时间执行任务,对应代码为: # @register_job(scheduler, 'cron', day_of_week='mon-fri', hour='9', minute='30', second='10',id='task_time') @register_job(scheduler, "interval", seconds=10, id="test_hjy") def my_job(): # 这里写你要执行的任务 obj = SSHConnection() obj.run() register_events(scheduler) scheduler.start() except Exception as e: print(e) # 有错误就停止定时器 scheduler.shutdown()
参数
- scheduler: 指定调度器
- trigger: 任务执行的方式,共有三种:'date'、'interval'、'cron'。
- 'date' + 'run_date' 的参数组合, 能实现单次任务。 例子:2019-07-07 22:49:00 执行任务
@register_job(scheduler, 'date', id='test', run_date='2019-07-07 22:49:00')
注:在亲测时,执行完任务会报错,原因时执行完任务后会去mysql中删除djangojob表中的任务。但是djangojobexecution表记录着执行结果,有外键关联着djangojob表,所以删除时显示有外键约束错误。但是任务会正常执行,执行之后也会正常删除。 - 'interval' + 'hours' + 'minutes' + ..... 的参数组合,能实现间隔性任务。 例子:每隔3个半小时执行任务 还有seconds,days参数可以选择 注:如果任务需要执行10秒,而间隔设置为1秒,它是不会给你开10个线程同时去执行10个任务的。它会错过其他任务直到当前任务完成。
- @register_job(scheduler, 'interval', id='test', hours=3, minutes=30)
- 'cron' + 'hour' + 'minute'+...的参数组合,能实现cron类的任务。 例子:每天的8点半执行任务 还有day,second,month等参数可以选择。
- @register_job(scheduler, 'cron', id='test', hour=8, minute=30)
- 'date' + 'run_date' 的参数组合, 能实现单次任务。 例子:2019-07-07 22:49:00 执行任务
- id: 任务的名字,不传的话会自动生成。不过为了之后对任务进行暂停、开启、删除等操作,建议给一个名字。并且是唯一的,如果多个任务取一个名字,之前的任务就会被覆盖。
- args: list类型。执行代码所需要的参数。
- next_run_time:datetime类型。开始执行时间。如果你现在创建一个定时任务,想3天后凌晨三点半自动给你女朋友发微信,那就需要这个参数了。
5.运行结果