zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    kvm virtio
    GPU 线程块/线程束
    ubuntu source
    React
    分布式系统
    honpeyhonepy
    css是干什么的
    bootstrap中的横的列
    数据安全之 alert logic
    viewset的使用的方法
  • 原文地址:https://www.cnblogs.com/huangjiyong/p/12492281.html
Copyright © 2011-2022 走看看