Web2Py中的代码每次调用都会被解释吗?
那么,这样做有什么好处呢?(当然可以避免重启网络服务器)。但是,这不是一个性能瓶颈吗?在生产环境中,有没有可能让web2py直接从字节码运行,跳过解释的阶段(缓存),也就是说除了第一次请求之外?
2 个回答
2
我对web2py不是特别了解,但它和大多数其他Python框架一样,是通过WSGI运行的。这意味着代码只有在进程启动时才会被解释,之后会一直保存在内存中。进程是由web服务器动态启动和结束的,但通常会持续处理多个请求。
无论如何,Python解释器在第一次读取代码时通常会创建一个字节码文件,.pyc
。在web服务器环境中,这和其他地方的工作原理是一样的。
不过,一般来说,代码解析并不是一个特别大的瓶颈——转换成字节码的速度相当快。在一个web应用中,瓶颈几乎肯定是在其他地方(可能是在与数据库的连接上)。
6
在web2py中,默认情况下,模型、视图和控制器中的所有代码(不包括web2py自己的代码,也不包括你在模型、视图和控制器中引入的模块代码)在每次请求时都会被解释。这意味着你可以使用第三方的网络服务器(比如apache),而且每次修改代码后都能立即看到效果,无需重启。PHP也是这样工作的。性能损失几乎可以忽略,因为解析代码所花的时间比执行代码的时间要短。
另外,在管理界面中有一个“编译”按钮,可以将你的代码编译成字节码,并把视图层次结构(扩展和包含的视图)合并成每个操作的一个文件,这样就消除了性能损失。这个功能还允许你分发已经编译的代码,而不需要公开源代码。许可证是允许这样做的。