【问题标题】:Is it possible to have Flask/Werkzeug's auto reloader respect the -O optimisation flag是否可以让 Flask/Werkzeug 的自动重新加载器尊重 -O 优化标志
【发布时间】:2014-02-27 13:10:47
【问题描述】:

基本上,我有一小部分基于 Flask 的应用程序会产生一个后台进程来完成一些工作。在生产环境中,我只想suprocess.Popen 并“忽略”该子流程发生的事情。然而,在开发过程中,我想改用check_output,这样万一确实出了问题,我就有更好的机会抓住它。

为了确定是否使用check_output,我只需将其包装在if __debug__ 中,或多或少会转化为:

def spawn_process():
    if __debug__:
        subprocess.check_output(args, stderr=subprocess.STDOUT)
    else:
        subprocess.Popen(args)

我的印象是,通过这样做,我可以简单地使用-O Python 标志来获得开发期间的替代行为——在生产中,我计划使用 mod_wsgi 的 WSGIPythonOptimize 指令来获得相同的效果。但是,Flask/Werkzeug 的自动重新加载器在生成自己的子进程时似乎忽略了 Python 标志。调试器中的一个简单的print __debug__ 显示它确实设置为True,而sys.flags 全部为零。

所以我的问题是:有什么方法可以强制 Flask/Werkzeug 的自动重新加载器尊重最初传递给 Python 的标志?

禁用自动重新加载确实意味着使用-O 标志,但这样做会带来一点不便,我宁愿不处理它,但有更好的方法。

【问题讨论】:

    标签: flask werkzeug


    【解决方案1】:

    我不相信你可以让自动重装器尊重 -O 标志。但是,您可以检查应用程序中的 debug 标志来决定如何生成子进程:

    from flask import current_app
    
    def spawn_process():
        if current_app.debug:
            subprocess.check_output(args, stderr=subprocess.STDOUT)
        else:
            subprocess.Popen(args)
    

    【讨论】:

    • 将它与run(debug=False, use_reloader=True) 一起使用最终实现了我想要的。谢谢。
    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 2011-11-23
    • 2019-02-13
    • 2013-07-30
    • 2010-12-20
    • 2012-03-25
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多