Stripping code for production
所以我想在将代码部署到appengine之前从物理上消除调试代码。我现在做的是一个简单的检查:
1 2 3 4 5 6 | settings.py: DEBUG = os.environ['HTTP_HOST'] == 'localhost' from settings import DEBUG if DEBUG: #ensure I haven't screwed smth up during refactoring |
但是这种检查会在每次调用期间消耗CPU周期,对吗?在爪哇,有一种模式,它会在编译时删除调试代码:
1 2 3 4 5 | public static final boolean DEBUG = true; // change to false before going production if(DEBUG){ //debug logging } |
有没有一种干净的方法可以在python中实现相同的效果,或者我应该用类似于
不,没有干净的路。
python中的条件编译
不同的问题,相似的目标。
首先,我建议您检查"os.environ['server_software'].startswith('dev')"。即使您访问另一台主机上的dev服务器,这也会起作用。
此外,只有在第一次在每个应用服务器实例上导入配置模块时,才会对"debug"语句进行评估。这很好,因为调试状态不会在请求之间改变,而且它还节省了一些CPU周期。不过,如果您稍后处于调试模式,我不会担心CPU周期消耗的检查——挂起的结果要低得多,而且我怀疑您甚至可以测量简单if语句的性能下降。
如果您担心代码并且能够这样做,那么可以使用decorator方法来注入调试,然后对于生产代码,将decorator函数重新定义为no ops。
老实说,我不担心,因为if语句应该与assembly中的跳转语句对应,或者可能不止这两个语句。
您很可能会从使用日志模块和重要性级别中获益。
在发布之前不需要删除代码,如果需要在生产环境中进行调试,您可以对重要性级别进行粒度配置,并且可以很容易地搜索代码以查找通知的来源。