代码之家  ›  专栏  ›  技术社区  ›  yanchenko

生产剥离代码

  •  0
  • yanchenko  · 技术社区  · 15 年前

    所以我想在将代码部署到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周期,对吗? 在爪哇,有一种模式,它会在编译时删除调试代码:

    public static final boolean DEBUG = true; // change to false before going production
    
    if(DEBUG){
     //debug logging
    }
    

    有没有一种干净的方法可以在python中实现相同的效果,或者我应该用类似smth的方法包装要剥离的代码 #%STRIP_ME% 然后针对它运行自定义脚本?

    4 回复  |  直到 15 年前
        1
  •  2
  •   Nick Johnson    15 年前

    首先,我建议您检查“os.environ['server_software'].startswith('dev')”。即使您访问另一台主机上的dev服务器,这也会起作用。

    此外,只有在第一次在每个应用服务器实例上导入配置模块时,才会对“debug”语句进行评估。这很好,因为调试状态不会从一个请求更改为另一个请求,而且它还节省了一些CPU周期。不过,如果您稍后处于调试模式,我不会担心CPU周期消耗的检查——挂起的果实要少得多,而且我怀疑您甚至可以 测量 简单if语句的性能下降。

        2
  •  3
  •   Community taleinat    7 年前

    不,没有干净的路。

    Conditional compilation in Python

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

        3
  •  2
  •   Jim Deville    15 年前

    如果您担心代码并且能够这样做,那么可以使用decorator方法来注入调试,然后对于生产代码,将decorator函数重新定义为no ops。

    老实说,我不担心,因为if语句应该与assembly中的跳转语句对应,或者可能不止这两个语句。

        4
  •  1
  •   Dan Carley    15 年前

    使用 logging module 以及重要性级别。

    在发布之前不需要删除代码,如果需要在生产环境中进行调试,可以对重要性级别进行粒度配置,并且可以很容易地搜索代码以查找通知的来源。