剥离生产代码

时间:2009-10-05 06:14:56

标签: python google-app-engine

所以我想在将代码部署到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%这样的smth包装代码然后针对它运行自定义脚本?

4 个答案:

答案 0 :(得分:3)

不,没有干净的方式。

Conditional compilation in Python

不同的问题,类似的目标。

答案 1 :(得分:2)

如果您担心代码并且能够执行此操作,则可以使用装饰器方法来注入调试,然后对于生产代码,将装饰器函数重新定义为无操作。

老实说,我不会担心它,因为if语句应该对应于汇编中的跳转语句,或者可能比这更多。

答案 2 :(得分:2)

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

此外,只有在每个App服务器实例上第一次导入配置模块时,才会评估您的'DEBUG'语句。这很好,因为调试状态不会从请求变为请求,并且还节省了一些CPU周期。我不担心你以后是否处于调试模式时检查的CPU周期检查 - 有很多,更低的结果,我怀疑你甚至可以测量的性能下降简单的if语句。

答案 3 :(得分:1)

您最有可能从使用logging module和重要性级别中受益。

在发布之前不需要删除代码,如果您需要在生产中进行调试,则可以精确配置重要性级别,并且可以轻松搜索代码以获取通知的来源。