Flask中执行定时任务

使用flask_apscheduler

采用crontab的方式

1
2
3
4
5
6
7
8
# 定时任务
scheduler = APScheduler()
scheduler.init_app(app)
scheduler.start()
# (0-6或星期一,星期二,星期五,星期四,星期五,星期五,星期日)
# 修改时间戳
timezone = pytz.timezone('Asia/Shanghai')
scheduler.add_job(func=weekly_task, triggers='cron', hour=1, minute=1, day_of_week='4', id='weekly_task', timezone=timezone)

其他方式

添加一个定时任务,时间间隔为60s,start_date为当前时间后的45s,end_date为当前时间后的645s,args中传递的为参数,query_instance_info是定时要调用的方法

1
2
3
4
scheduler.add_job(query_instance_info, interval=60, id=processinst_id,
start_date=datetime.now() + timedelta(seconds=45),
end_date=datetime.now() + timedelta(seconds=645),
args=[query_instance_dict, crete_failed_list, instance_apply_obj_list, processinst_id, pay_cost])

遇见的一些问题

在使用docker发布项目的过程中,docker中的时间和时区均为错误的值,但是某次发布将时间改为了正确的指,但是时区却是错的,这会导致任务的执行时间出现问题。scheduler默认底层取的是/etc/timezone下的时区,如果没有再去找/etc/localtime

参考文档

https://github.com/viniciuschiele/flask-apscheduler/tree/master/examples

https://apscheduler.readthedocs.io/en/latest/modules/triggers/cron.html