先说结论: 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. 环境与背景,使用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先说结论: fl...
(注:demo版本部分功能已补充) :beer_mug: )
$ git clone https://github.com/guomaoqiu/
Job
Center.git
$ cd
Job
Center
$ pipenv install --dev
$ pipenv shell
# 需提前创建数据库
$
flask
init
$
flask
run
*
Run
ning on http://127.0.0.1:5000/
$ pipenv install # 创建虚拟环境并安装依赖
$ pipenv shell # 激活虚拟环境
$
flask
initdb # 初始化数据库
$
flask
ad
mi
n # 创建管理员账户
$
flask
initdb --drop # 删除数据
APSche
duler
工作
流程图
清爽的登录界面
针对不同逐步动态增加定时任务
任务执行输出日志持久化存放并展示
apsche
duler
实现定时任务
报错
:
Run
time
of
job
"login (trigger: interval[0:10:00], next
run
at: 2021-04-22 18:39:54 CST)" was
mi
sse
d by 0:00:02.547804
coalesce:当由于某种原因导致某个
job
积攒了好几次没有实际运行(比如说系统挂了5分钟后恢复,有一个任务是每分钟跑一次的,按道理说这5分钟内本来是“计划”运行5次的,但实际没有执行),如果coalesce为True,
关于
Flask
-
APSche
duler
定时任务遇到的问题及
解决
方法
1.app初始化的时,就要初始化Sche
duler
对象,并且设置为app的属性并
启动
,在接口中初始化,添加定时任务是无效的。
2.执行时
报错
:
Run
time
Error: No application found. Either work inside a view function or push an application context.
Run
time
Error: Working outside of application co
git clone https://github.com/viniciuschiele/
flask
-
apsche
duler
.git
cd
flask
-
apsche
duler
python setup.py install
3. 在需要使用的 python 文件中导入
Flask
-
APSche
duler
from
flask
_
apsche
duler
import
APSche
duler
安装完成后,可以在
flask
app中使用
APsche
duler
来实现定时任务。
code-server 扩展无法启动,报错‘crypto.subtle‘ is not available so webviews will not work的解决方法
三头六臂的小白:
使用docker版paddle镜像 提示 You are using GPU version Paddle, but your CUDA device is not set properly
三头六臂的小白:
最新:linux下最新libsodium安装方法 (debian ubuntu20.04测试通过 )
三头六臂的小白:
最新:linux下最新libsodium安装方法 (debian ubuntu20.04测试通过 )
匆匆又夏天-q:
开启Hyper-v,使用蓝叠模拟器进行抓包的曲折经历
三头六臂的小白: