2009-12-13 36 views
1

我在appengine的juno(http://github.com/breily/juno/)上使用了修改後的版本。我遇到的問題是我有這樣的代碼:緩存應用後的Python應用引擎導入問題

import juno 
import pprint 

@get('/') 
def home(web): 
    pprint.pprint("test") 

def main(): 
    run() 
if __name__ == '__main__': 
    main() 

我第一次在開發環境中啓動應用程序,它工作正常。第二次和每次後,它無法找到pprint。我得到這個錯誤:

AttributeError: 'NoneType' object has no attribute 'pprint' 

如果我設置在函數內部導入它屢試不爽:

@get('/') 
def home(web): 
    import pprint 
    pprint.pprint("test") 

所以看起來它是緩存的功能,但由於某些原因,進口不被包括在使用該緩存時。我嘗試刪除底部的main()函數以查看是否會刪除此腳本的緩存,但我遇到了同樣的問題。

今天早上這段代碼工作正常,我不知道什麼可以改變造成這種情況。任何見解都會被讚賞。

回答

0

我會離開它那樣。我看到Google推出了關於App Engine優化的slideshare,它表示通過將導入保留在方法內部可以獲得更好的性能,因此除非必要,否則不會導入它們。

+0

你有鏈接嗎? – seriousdev 2013-06-09 13:27:54

0

是否有可能在某處重新分配名稱pprint?我知道模塊級名稱(如從導入語句中得到的內容)變成None的唯一兩種方式是,如果您自己指定pprint = None或解釋器關閉時,Python的清理會將所有模塊級名稱分配給None因爲它關閉了一切。