2009-10-05 77 views
0

所以我想在物理上摆脱调试代码,然后将其部署到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%然后针对它运行一个自定义脚本?

+0

上述代码在Java中不消耗任何CPU周期的唯一原因是因为Java优化器可以说是“太聪明”了。无论如何,它会优化整个if语句。虽然if语句本身没有什么特别之处。 – 2009-10-05 06:26:06

+0

@Matthew Scharley确切地说。这就是我喜欢它的原因。 :) – yanchenko 2009-10-05 06:42:27

回答

2

首先,我建议让您检查 “os.environ [ 'SERVER_SOFTWARE']。startswith( '开发')”。即使您访问另一台主机上的开发服务器,这也可以工作。

而且,你的“DEBUG”语句只会被评估的第一次配置模块上的每个应用服务器实例导入。这很好,因为调试状态不会从请求变为请求,而且还可以节省几个CPU周期。我不担心如果你以后在调试模式下检查CPU周期消耗 - 虽然有很多很低的挂果,我怀疑你甚至可以测量简单的if语句的性能下降。

2

如果你担心代码,能够做到这一点,你可以使用一个装饰的方式注入(1)调试,然后生产代码,重新定义了装饰功能,是无操作。

老实说,我不会担心它虽然因为if语句应该对应一个跳转语句组装,也许一对夫妇不止于此。

1

你会从使用logging module和重要性水平最有可能受益。

代码就不需要发布之前被去除,可以精细地配置的重要性级别,您都不需要在生产调试变得容易搜索您对于其中的告示,从起源代码。