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秒的任务超时容错
}
]