python中apache / modwsgi应用程序的内存模型?

时间:2011-09-03 13:09:28

标签: python apache memory-management mod-wsgi

在常规应用程序(如Windows)中,当在全局级别创建对象/变量时,在程序运行的整个持续时间内,整个程序都可以使用它。

例如,在用PHP编写的Web应用程序中,所有变量/对象都在脚本末尾被销毁,因此必须将所有内容写入数据库。

a)那么在apache / modwsgi下运行python呢?这对内存有何影响?

b)如何创建在网页请求之间保持不变的对象,以及如何确保apache / modwsgi中没有线程问题?

2 个答案:

答案 0 :(得分:1)

请阅读官方mod_wsgi文档中的以下内容:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

它解释了可以运行的各种模式,并提供了有关数据范围和共享的一般指导。

答案 1 :(得分:0)

导入模块时会创建所有Python全局变量。重新导入模块时,使用相同的全局变量。

Python Web服务器不进行线程化,而是进行预分叉进程。因此,Apache没有线程问题。

Apache下的Python进程的生命周期取决于。 Apache具有设置生成了多少个子进程,保留并保留的权限。这意味着您可以在Python进程中使用全局变量进行缓存(进程内缓存),但是该进程可能在任何请求之后终止,因此您无法在全局变量中放置任何持久数据。但是这个过程并不一定需要终止,在这方面,Python比PHP更有效(源代码不会针对每个请求进行解析 - 但是你需要让服务器处于重载模式以在开发过程中读取源代码的变化)

由于全局变量是每个进程并且可以有N个进程,因此进程使用memcached等机制共享“Web服务器全局”状态。

通常Python全局变量只包含

  • 设置流程初始化期间设置的变量

  • 缓存数据(会话/用户中立)