• django-apscheduler 实现定时任务详解


    安装

    官方的 git 指引 点这里

    pip install django-apscheduler

    配置

    在 setting.py 的 app 里面加入 

    INSTALLED_APPS = (
        # ...
        "django_apscheduler",
    )

    apscheduler 存在数据库依赖.  migrate 一下

    migrate

    会在数据库中生成两行表

     表结构在下面的使用中再说

    使用

    在任意的 view.py 中或者项目的 主 urls.py 中进行操作 (其他的暂时没试过, 不代表不行)

    from apscheduler.schedulers.background import BackgroundScheduler
    from django_apscheduler.jobstores import DjangoJobStore, register_job
    
    
    @register_job(scheduler, "interval", minutes=2, id="test_func", replace_existing=True, misfire_grace_time=120)
    def test_func():
        views_tools.host_save()
    
    scheduler.start()

    简单的原理解释

    注册后的任务会根据 id 以及相关的配置进行定时任务, 定时任务分为两种

    1. 定时循环任务 (循环不断触发 比如每 20s 执行一次)

    2. 定点执行任务 (只触发一次 比如 周一执行一次)

    3. 定时定点循环任务 (比如 每周一执行一次)

    任务的执行存在撞车的可能性, 即上一次任务没执行完, 下次任务就来了

    此时下次任务会被错过 (missed) 上次任务不执行完. 下次任务永远都会错过

    参数详解

    schedul:   指定调度器

    trigger:    'date'、'interval'、'cron'。

      'date' + 'run_date'  ---- 单次任务     @register_job(scheduler, 'date', id='test', run_date='2021-07-07 00:00:00') 

      'interval' + 'hours' + 'minutes' + .....   ------ 间隔性任务     @register_job(scheduler, 'interval', id='test', hours=3, minutes=30) 

      'cron' + 'hour' + 'minute'+... ----- cron类的任务     @register_job(scheduler, 'cron', id='test', hour=8, minute=30)  可选参数 day,second,month..

    id:   任务的名字,不传的话会自动生成。不过为了之后对任务进行暂停、开启、删除等操作,建议给一个名字。并且是唯一的,如果多个任务取一个名字,之前的任务就会被覆盖。

    args:   list  执行代码所需要的参数。

    replace_existing:   默认不设置的话回导致重启项目后,  爆id已存在的错误, 设置此参数后会对已有的 id 进行覆盖从而避免报错

    next_run_time:  datetime 开始执行时间

    misfire_grace_time:   强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了 

      此参数在 官方的 git 中没有特别提及, 详解可以看这里 官方的详解 

    执行结果查看

    在admin 里面查看也较为方便, 对 admin 进行了相应的封装方便过滤啥的, 以及状态清晰

    django_apscheduler_djangojob 表保存注册的任务以及下次执行的时间

    django_apscheduler_djangojobexecution 保存每次任务执行的时间和结果和任务状态

    这里注意 missed 则是表示撞车的场景, 为避免这种场景需要在 周期的长度以及是否进行强制结束进行选择

    本文来自博客园,作者:羊驼之歌,转载请注明原文链接:https://www.cnblogs.com/shijieli/p/15035357.html

  • 相关阅读:
    Asp.net分页控件AspNetPager的使用(DataList和Reapter结合Linq的编辑与删除)
    Zend Framework使用Extjs进行数据库交互和分页
    课程设计之(struts2+Hibernate)航空订票系统
    课程设计之(ZendFrameWrok)构建的航空订票系统网站
    Ubuntu10.10 Zend FrameWork配置及helloworld显示
    ExtJs、Struts2、Hibernate3.2登录页面的简单实现
    Asp.net的FileUpload控件的文件上传与Extjs文件上传的简单Demo
    学习linux的一些网络资源
    100条超搞笑的“雷人”QQ/MSN 签名
    超难的75道逻辑思维题
  • 原文地址:https://www.cnblogs.com/shijieli/p/15035357.html
Copyright © 2020-2023  润新知