请教 flask apscheduler 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
AerithLoveMe
V2EX    Python

请教 flask apscheduler 问题

  •  
  •   AerithLoveMe 2022-05-15 13:57:22 +08:00 3510 次点击
    这是一个创建于 1312 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在 flask 里使用 apscheduler ,进行定时任务创建的时候报
    RuntimeError: Working outside of application context.

    缺少上下文,网上找了一大堆没解决,问问各位大神这怎么办?

    目录结构:

    -project
    --task
    ---job(任务包装)
    ---scheduler(调度器包装)
    --app(启动)
    --notify(蓝图)

    具体就是我在 notify 里面通过接口动态创建定时任务,任务触发了,但是会报这个错误
    11 条回复    2022-05-30 14:46:29 +08:00
    westoy
        1
    westoy  
       2022-05-15 14:01:08 +08:00
    可以参考官方文档那个集成 celery 的例子, 简单的说调用都要包在 with app.app_context()里, 不过你这个把 flask 和 apscheduler 包一起的需求我感觉有问题......
    AerithLoveMe
        2
    AerithLoveMe  
    OP
       2022-05-15 14:03:57 +08:00
    @westoy flask 一般不用 apscheduler 了吗?我刚上手。。
    Macv1994
        3
    Macv1994  
       2022-05-15 14:10:48 +08:00
    可以参考我这个代码(代码很垃圾) https://github.com/weijiang1994/Blogin/blob/master/blogin/task.py#L29

    你这个报错是没有在 flask 应用的上下文环境中执行,我记得 flask-asp 的例子有比较详细的代码。
    westoy
        4
    westoy  
       2022-05-15 14:14:17 +08:00
    @AerithLoveMe

    不是 python 的问题啊, 一般 web 和定时任务都是拆开来的, 不会放一起的。 至于 python , 部署在多核上肯定多进程啊, 你到时候每个进程一个 apscheduler , 然后还要做同步判断, 不然一个任务几个进程各跑一遍......python 跑定时任务直接用现成的中间件一般也是 rq 或者 cerlery 的, 你真的要用 apscheduler , 建议单独跑一个服务, 用 0mq 或者 redis pubsub 去通讯
    zcf0508
        5
    zcf0508  
       2022-05-15 14:50:52 +08:00
    我直接用的 flask-sqlalchemy ,没碰到过类似问题
    zcf0508
        6
    zcf0508  
       2022-05-15 14:51:31 +08:00
    @zcf0508 写错了,是 flask-apscheduler
    cz5424
        7
    cz5424  
       2022-05-15 16:10:23 +08:00
    支持一楼的,上下文问题,报错信息是因为需要 with app.app_context()里执行
    chaleaochexist
        8
    chaleaochexist  
       2022-05-16 00:51:46 +08:00
    如果能提供一个最小可重现代码。会得到有效回答。否则大家只能靠猜。
    ebingtel
        9
    ebingtel  
       2022-05-16 13:59:57 +08:00
    具体就是我在 notify 里面通过接口动态创建定时任务,任务触发了,但是会报这个错误

    你应该是在 apscheduler 里面引用了 current_app, request 之类的对象、但是又不在 app_context 等上下文里面……简单的解决: 把需要的参数提取出来,直接传入到 apscheduler 函数里面,避免引用
    luckyc
        10
    luckyc  
       2022-05-26 20:35:51 +08:00
    @chaleaochexist 没什么好猜的, 提示很清楚就是上下文导致的, 用一楼的方法
    敲上
    from app.exts import db
    with db.app_context():
    再拿出游标卡尺, 把你写的逻辑锁进一个 tab 就行了
    rev1si0n
        11
    rev1si0n  
       2022-05-30 14:46:29 +08:00
    @westoy 我在同进程内集成了 grpc + tornado + apscheduler + asyncio ,works as expected ,暂没有发现问题,不过我确实没什么建议给题主,毕竟情况不一。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     928 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 22:07 PVG 06:07 LAX 14:07 JFK 17:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86