Flask-apscheduler 无法启动工作,报错Run time of job was missed by... 解决方法

先说结论: flask-apscheduler 中如果要调用 app_context环境的话,用 scheduler.app.app_context

详细过程:

1. 环境与背景,使用Flask 还有flask-apscheduler flask-sqlalchemy 这几个东西重构了一个自己版本的 https://github.com/guomaoqiu/JobCenter 工具,用来管理自己的工作,因为应用使用了 flask-sqlalchemy 所以很多操作要在 flask的app_context中运行,就使用了flask-apscheduler,遇到了 Run time of job xxx was missed by xxx...bug

2. Debug过程:

常见的第一个原因就是多次启动,解决方法也简单 use_reloader 关掉就好了

app.run(host="0.0.0.0", debug=True, use_reloader=False)

但是,偶尔的偶尔 还是出现这个问题,通常都是任务等了很久都没有开始,这块就会出现这个问题...

https://blog.csdn.net/weixin_44786530/article/details/90731800  这位大佬的文章已经讲解了我的整个过程,简单的说就是对APSCHEDULER的配置都没啥用,主要是你启动的东西没起来...

回到我的DEBUG过程,因为程序没有log出来,没有告诉我具体的启动哪里失败了,这就TM很难搞。

看了下代码调用环境时 我用的是 from xxx import app 然后再用 with app.app_context 

我发现我开着页面,这个定时任务就能跑,如果我关了所有flask相关页面这东西就跑不起来了....

而且他不是跑起来后报错,就是MISSED,这里我的推测是本身flask-apscheduler 调起一个任务时候,没有加载(或者加载了flask-aps对应的context,而不是想要的全局app的环境),因此如果没有前端页面时候,调用 app.app_context这块就会卡住

在flask-apscheduler 官方文档里其实提了一嘴
 https://viniciuschiele.github.io/flask-apscheduler/rst/usage.html 最后一个段落:如果你用flask-apscheduler 调起的任务 需要app_context 的话 应该用 scheduler(对应实例).app.app_context

目前APP已经没有这个需要打开页面才能跑的问题了!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值