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
Ritter
V2EX  ›  Python

Flask 中使用 APScheduler 应用上下文问题

  •  
  •   Ritter · 2020-05-09 17:22:01 +08:00 · 2855 次点击
    这是一个创建于 1691 天前的主题,其中的信息可能已经有所发展或是发生改变。

    没有使用 GitHub 上的 Flask-APScheduler 插件
    自己写了一个类 在 add_job 的时候给 func 套了一层 里面添加了 flask 的应用上下文 如下
    Yli4iR.png
    然后这是配置 任务存储用了 redis
    YlixJI.png
    调度器用的是 Gevent 的
    YlFkwQ.png
    但是运行的时候还是报了上下文外的错误
    YlZOw8.png
    可是换成 MemoryJobStore 就不会报错(看了文档区别貌似是 MemoryJobStore 不会序列化 job, 难道是因为这个吗?)
    有大佬遇到过类似的情况吗 或者说有其他方法向 job 添加 flask 应用上下文吗

    17 条回复    2020-05-09 19:54:58 +08:00
    Ritter
        1
    Ritter  
    OP
       2020-05-09 17:23:49 +08:00
    Ritter
        2
    Ritter  
    OP
       2020-05-09 17:31:12 +08:00
    est
        3
    est  
       2020-05-09 17:37:43 +08:00
    python 基于 wsgi 的 web 框架一律不要另外起 thread,或者任意其他异步任务。单独开个进程 worker
    Ritter
        4
    Ritter  
    OP
       2020-05-09 17:39:58 +08:00
    @est 大佬意思是换成类似 celery 之类的异步任务框架吗
    forrestshuang
        5
    forrestshuang  
       2020-05-09 17:49:14 +08:00
    @Ritter 要用进程,thread 会阻塞 掉
    Ritter
        6
    Ritter  
    OP
       2020-05-09 17:54:35 +08:00
    @forrestshuang 我这个问题应该跟进程或者线程没什么关系吧。。。
    est
        7
    est  
       2020-05-09 17:57:13 +08:00
    @forrestshuang 单独的进程可以。子进程也有各种问题。


    @Ritter 最好这样。
    Latin
        8
    Latin  
       2020-05-09 17:57:32 +08:00
    function 内部试试 current_app._get_current_object()
    Latin
        9
    Latin  
       2020-05-09 17:57:48 +08:00   ❤️ 1
    app = current_app._get_current_object()
    Ritter
        10
    Ritter  
    OP
       2020-05-09 18:07:27 +08:00
    @est 我就是觉得 celery 太重了 所以才用 APScheduler 。。。

    @Latin 不行 还是报一样的错误
    est
        11
    est  
       2020-05-09 18:21:40 +08:00
    @Ritter 新开一个进程跑 APS 任务。
    Ritter
        12
    Ritter  
    OP
       2020-05-09 18:32:06 +08:00
    @est 这样的话 如果 flask 那边想 add_job 的话 应该怎么做
    est
        13
    est  
       2020-05-09 18:39:01 +08:00   ❤️ 1
    @Ritter redis 什么的倒手一下
    Ritter
        14
    Ritter  
    OP
       2020-05-09 18:51:36 +08:00
    @est 这样感觉就有点麻烦了。。。 不过还是感谢大佬回复
    wzwwzw
        15
    wzwwzw  
       2020-05-09 19:20:09 +08:00
    APScheduler 如果用 gunicorn 的话,会重复启动,我们现在采用的方案是 apscheduler 单独启动,使用 RPC 的模式交互。
    lsvih
        16
    lsvih  
       2020-05-09 19:28:08 +08:00
    遇到过一样的问题,我绕了一下,单独用 apscheduler 执行命令把结果写到数据库,然后前端定时请求。。
    so1n
        17
    so1n  
       2020-05-09 19:54:58 +08:00
    最好还是把 Apscheduler 与 flask 解耦,不要一起运行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:38 · PVG 06:38 · LAX 14:38 · JFK 17:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.