2009-10-05 70 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和重要性水平最有可能受益。

代碼就不需要發佈之前被去除,可以精細地配置的重要性級別,您都不需要在生產調試變得容易搜索您對於其中的告示,從起源代碼。