剥离代码生产
问题描述:
所以我想在物理上摆脱调试代码,然后将其部署到appengine。 我在做什么,现在是一个简单的检查:剥离代码生产
settings.py:
DEBUG = os.environ['HTTP_HOST'] == 'localhost'
from settings import DEBUG
if DEBUG:
#ensure I haven't screwed smth up during refactoring
但这种检查将是每个通话过程中消耗CPU周期,对不对? 在Java中,有将在编译时剥离调试代码的模式:
public static final boolean DEBUG = true; // change to false before going production
if(DEBUG){
//debug logging
}
有没有干净的方式来实现在Python同样的效果,或者我应该换行代码与水木清华剥离像#%STRIP_ME%
然后针对它运行一个自定义脚本?
答
首先,我建议让您检查 “os.environ [ 'SERVER_SOFTWARE']。startswith( '开发')”。即使您访问另一台主机上的开发服务器,这也可以工作。
而且,你的“DEBUG”语句只会被评估的第一次配置模块上的每个应用服务器实例导入。这很好,因为调试状态不会从请求变为请求,而且还可以节省几个CPU周期。我不担心如果你以后在调试模式下检查CPU周期消耗 - 虽然有很多很低的挂果,我怀疑你甚至可以测量简单的if语句的性能下降。
答
如果你担心代码,能够做到这一点,你可以使用一个装饰的方式注入(1)调试,然后生产代码,重新定义了装饰功能,是无操作。
老实说,我不会担心它虽然因为if语句应该对应一个跳转语句组装,也许一对夫妇不止于此。
上述代码在Java中不消耗任何CPU周期的唯一原因是因为Java优化器可以说是“太聪明”了。无论如何,它会优化整个if语句。虽然if语句本身没有什么特别之处。 – 2009-10-05 06:26:06
@Matthew Scharley确切地说。这就是我喜欢它的原因。 :) – yanchenko 2009-10-05 06:42:27