Django------详解django-apscheduler的使用方法

1.安装模块

pip install django-apscheduler

2.配置

  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)
  • id: 任务的名字,不传的话会自动生成。不过为了之后对任务进行暂停、开启、删除等操作,建议给一个名字。并且是唯一的,如果多个任务取一个名字,之前的任务就会被覆盖。
  • args: list类型。执行代码所需要的参数。
  • next_run_time:datetime类型。开始执行时间。如果你现在创建一个定时任务,想3天后凌晨三点半自动给你女朋友发微信,那就需要这个参数了。

 5.运行结果

 

 

 参考博客:https://cloud.tencent.com/developer/article/1585026

posted @ 2020-03-14 15:10  正在加载中…  阅读(8206)  评论(0编辑  收藏  举报