【发布时间】: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 标志,但这样做会带来一点不便,我宁愿不处理它,但有更好的方法。
【问题讨论】: