zoukankan      html  css  js  c++  java
  • APScheduler+Flask

    1.首先创建一个定时任务管理的类

    创建一个 ScheduleTask.py,定义一个类

    class ScheduleConfig(object):
    JOBS = [
    {
    'id': '配置文件校验任务', #任务名,自己随便起
    'func': 'service.ConfigCheckService:compareConfig', #任务 调用的方法, 包.文件:方法名
    'trigger': { # trigger为调度类型

    'type': 'cron',

    'day_of_week': "0-6",
                    'hour': '*',
    'minute': '*',
    'second': '0'
    },
    'args':'',

    },
    {
    'id': '触发器为interval的测试任务',
    'func': 'task.ScheduleTask:job2',
    'args': '',
    'trigger': 'interval',
    'seconds': 120
    }

    ]

    SCHEDULER_API_ENABLED = True

    2. 在flask的启动文件(也就是app所在的文件
    )加入定时任务策略
    app = Flask(__name__)

    app.config.from_object(ScheduleTask.ScheduleConfig()) #在app里配置定时任务的类
    app.config.update(RESTFUL_JSON=dict(ensure_ascii=False))

    api = Api(app)
    api.add_resource(dataPushController.DeveloperDataPush, '/datapush/developerUrl')
    api.add_resource(dataPushController.ProductDataPush, '/datapush/productUrl')

    #初始化定时任务并启动
    scheduler = APScheduler()
    scheduler.init_app(app)
    scheduler.start()
     
    FAQ.定时任务有时候会执行失败
    Run time of job "9668_hack (trigger: interval[1:00:00], next run at: 2018-10-29 22:00:00 CST)" was missed by 0:01:47.387821

    问题解决如下(增加misfire_grace_time 等三个参数
    JOBS = [
    {
    'id': '配置文件校验任务',
    'func': 'service.ConfigCheckService:compareConfig',
    'trigger': {
    'type': 'cron',
    'day_of_week': "0-6",
    'hour': '*',
    'minute': '0/2',
    'second': '0'
    },
    'args':'',
    'coalesce': True, # 积攒的任务只跑一次
    'max_instances': 100, # 支持1000个实例并发
    'misfire_grace_time': 600 # 600秒的任务超时容错

    }

    ]
     


  • 相关阅读:
    MySQL统计逗号分隔字段元素的个数
    MySQL学习(十)索引
    MySQL学习(十一)为什么不推荐使用uuid和雪花id
    1.计算机系统概论
    MySQL学习(十二)排序原理
    MySQL学习(九)frm与ibd了解
    MySQL学习(十一)B树与B+树了解
    MySQL 某一列的值加入到另一列
    MySQL学习(十三)InnoDB
    IOSios微信打开网页键盘弹起后页面上滑,导致弹框里的按钮响应区域错位
  • 原文地址:https://www.cnblogs.com/peak911/p/11810451.html
Copyright © 2011-2022 走看看