2009-12-13 51 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因为它关闭了一切。