1
westoy 2022-05-15 14:01:08 +08:00
可以参考官方文档那个集成 celery 的例子, 简单的说调用都要包在 with app.app_context()里, 不过你这个把 flask 和 apscheduler 包一起的需求我感觉有问题......
|
2
AerithLoveMe OP @westoy flask 一般不用 apscheduler 了吗?我刚上手。。
|
3
Macv1994 2022-05-15 14:10:48 +08:00
可以参考我这个代码(代码很垃圾) https://github.com/weijiang1994/Blogin/blob/master/blogin/task.py#L29
你这个报错是没有在 flask 应用的上下文环境中执行,我记得 flask-asp 的例子有比较详细的代码。 |
4
westoy 2022-05-15 14:14:17 +08:00
@AerithLoveMe
不是 python 的问题啊, 一般 web 和定时任务都是拆开来的, 不会放一起的。 至于 python , 部署在多核上肯定多进程啊, 你到时候每个进程一个 apscheduler , 然后还要做同步判断, 不然一个任务几个进程各跑一遍......python 跑定时任务直接用现成的中间件一般也是 rq 或者 cerlery 的, 你真的要用 apscheduler , 建议单独跑一个服务, 用 0mq 或者 redis pubsub 去通讯 |
5
zcf0508 2022-05-15 14:50:52 +08:00
我直接用的 flask-sqlalchemy ,没碰到过类似问题
|
7
cz5424 2022-05-15 16:10:23 +08:00
支持一楼的,上下文问题,报错信息是因为需要 with app.app_context()里执行
|
8
chaleaochexist 2022-05-16 00:51:46 +08:00
如果能提供一个最小可重现代码。会得到有效回答。否则大家只能靠猜。
|
9
ebingtel 2022-05-16 13:59:57 +08:00
具体就是我在 notify 里面通过接口动态创建定时任务,任务触发了,但是会报这个错误
你应该是在 apscheduler 里面引用了 current_app, request 之类的对象、但是又不在 app_context 等上下文里面……简单的解决: 把需要的参数提取出来,直接传入到 apscheduler 函数里面,避免引用 |
10
l4ever 2022-05-26 20:35:51 +08:00
@chaleaochexist 没什么好猜的, 提示很清楚就是上下文导致的, 用一楼的方法
敲上 from app.exts import db with db.app_context(): 再拿出游标卡尺, 把你写的逻辑锁进一个 tab 就行了 |