是否可以让Flask / Werkzeug的自动重新加载器尊重-O优化标志

时间:2014-02-27 13:10:47

标签: flask werkzeug

基本上,我有一小部分基于Flask的应用程序,它产生了一个后台进程来完成一些工作。在生产环境中,我只想suprocess.Popen并“忽略”该子流程会发生什么。但是在开发过程中我想使用check_output代替,以防万一 出错我有更好的机会抓住它。

为了确定是否使用check_output,我只需将其包装在if __debug__中,或多或少地转换为:{/ p>

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__显示它确实设置为Truesys.flags全部为零。

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

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

1 个答案:

答案 0 :(得分:1)

我不相信你可以让autoreloader尊重-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)