Crontab和APScheduler

那年仲夏 提交于 2019-11-27 13:52:27

APScheduler

AScheduler是一个Python定时任务框架,使用起来十分方便。提供了基于日期,固定时间间隔及crontab类型的任务,并且可以持久化任务,并以daemon方式运行应用。

在Django使用APScheduler

安装包:

pip install apscheduler

pip install django-apscheduler

注册使用

  • 在配置文件中的INSTALL_APPS中注册定时任务
  • 对job的操作
    • add_job():会返回一个apscheduler.job.Job的实例,可以用来改变或者移除job。
    • scheduler_job():只适应于应用运行期间不会改变的job
  • 移除job
    • remove_job():使用jobID移除
    • job.remove():使用add_job()返回实例

迁移

migrate会生成两个表:django-apscheduler_djangojob,django_apscheduler_djangojobexecution,用来管理所需要的定时任务

具体实现

  • 1、可能会出现异常,所以首先需要使用异常捕获

  • 2、创建调度器的实例化对象scheduler=BackgroundScheduler()

  • 3、声明要使用的调度器scheduler.add_jobstore(DjangoJobStore),"default")

  • 4、使用装饰器的形式,为要定时执行的任务注册并设置循环方式,调度器,实现限制等

    @register_job(scheduler, 'cron', day_of_week='mon-fri', hour='9', minute='30', second='10',id='task_time')·
            def test_job():
               t_now = time.localtime()
               print(t_now)
    
  • 5、监控任务,使用django_apscheduler.jobstores提供的register_events监控任务:register_events(scheduler)

  • 6、开启调度器:scheduler.start()

  • 7、如果报错,调度器就立即停止执行:scheduler.shutdown()

Crontab

使用django

  • 前提

    django_crontab必须在Linux的crontab开启的情况下才可以使用,不然会出现不执行的情况
  • 安装

    • pip install django-crontab
  • 注册app

    • INSTALLED_APPS = ('django_crontab',...)
  • 配置settings.py

    • CRONJOBS = [('*/5 * * * *', '任务路径.任务函数名','>>/home/book.log')]

    • 参数说明:‘*/5 * * *’ 表示五分钟一次,而django-crontab是调用Linux的crontab.
      • 第一个参数:代表执行时间或者周期
        • 时间的顺序为分->时->天->周->月
      • 第二个参数:代表需要定时执行的函数(路径+函数名)
      • 第三个参数:输出log信息的路径+log文件
  • 启动使用

    • 启动
    • python manage.py crontab add

    • 显示当前的定时任务
    • python manage.py crontab show

    • 删除所有定时任务
    • python manage.py crontab remove

    • 编辑定时任务
    • crontab -e

    • 查看定时任务
    • crontab -l

  • 常见的参数

    • "*"表示可选的所有
    • "/"表示'每',比如若第一个参数为/5,就是五分钟一次
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!