推荐学习书目
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 · May 9, 2020 · 3529 views
    This topic created in 2251 days ago, the information mentioned may be changed or developed.

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

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


    @Ritter 最好这样。
    Latin
        8
    Latin  
       May 9, 2020
    function 内部试试 current_app._get_current_object()
    Latin
        9
    Latin  
       May 9, 2020   ❤️ 1
    app = current_app._get_current_object()
    Ritter
        10
    Ritter  
    OP
       May 9, 2020
    @est 我就是觉得 celery 太重了 所以才用 APScheduler 。。。

    @Latin 不行 还是报一样的错误
    est
        11
    est  
       May 9, 2020
    @Ritter 新开一个进程跑 APS 任务。
    Ritter
        12
    Ritter  
    OP
       May 9, 2020
    @est 这样的话 如果 flask 那边想 add_job 的话 应该怎么做
    est
        13
    est  
       May 9, 2020   ❤️ 1
    @Ritter redis 什么的倒手一下
    Ritter
        14
    Ritter  
    OP
       May 9, 2020
    @est 这样感觉就有点麻烦了。。。 不过还是感谢大佬回复
    wzwwzw
        15
    wzwwzw  
       May 9, 2020
    APScheduler 如果用 gunicorn 的话,会重复启动,我们现在采用的方案是 apscheduler 单独启动,使用 RPC 的模式交互。
    lsvih
        16
    lsvih  
       May 9, 2020
    遇到过一样的问题,我绕了一下,单独用 apscheduler 执行命令把结果写到数据库,然后前端定时请求。。
    so1n
        17
    so1n  
       May 9, 2020
    最好还是把 Apscheduler 与 flask 解耦,不要一起运行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4938 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 01:09 · PVG 09:09 · LAX 18:09 · JFK 21:09
    ♥ Do have faith in what you're doing.