python中apache/modwsgi应用程序的内存模型?
在常规应用程序(如Windows上)中,当在全局级别上创建对象/变量时,整个程序在整个程序运行期间都可以使用该对象/变量 例如,在用PHP编写的web应用程序中,所有变量/对象都会在脚本末尾被销毁,因此所有内容都必须写入数据库 a) 那么,在apache/modwsgi下运行的python呢?关于记忆,这是如何工作的python中apache/modwsgi应用程序的内存模型?,python,apache,memory-management,mod-wsgi,Python,Apache,Memory Management,Mod Wsgi,在常规应用程序(如Windows上)中,当在全局级别上创建对象/变量时,整个程序在整个程序运行期间都可以使用该对象/变量 例如,在用PHP编写的web应用程序中,所有变量/对象都会在脚本末尾被销毁,因此所有内容都必须写入数据库 a) 那么,在apache/modwsgi下运行的python呢?关于记忆,这是如何工作的 b) 如何创建在网页请求之间持久化的对象,以及如何确保apache/modwsgi中没有线程问题?导入模块时,将创建所有Python全局对象。重新导入模块时,将使用相同的全局变量
b) 如何创建在网页请求之间持久化的对象,以及如何确保apache/modwsgi中没有线程问题?导入模块时,将创建所有Python全局对象。重新导入模块时,将使用相同的全局变量 pythonweb服务器不执行线程,而是执行预先分叉的进程。因此,Apache没有线程问题 Apache下Python进程的生命周期取决于。Apache设置了生成、保留和终止子进程的数量。这意味着您可以在Python进程中使用globals进行缓存(进程内缓存),但该进程可能会在任何请求后终止,因此您无法将任何持久数据放入globals中。但是这个过程不一定需要终止,在这方面Python比PHP效率更高(不是对每个请求都解析源代码,但是您需要让服务器处于重新加载模式,以便在开发过程中读取源代码更改) 由于全局是每个进程的,并且可以有N个进程,因此这些进程使用memcached等机制共享“web服务器全局”状态 通常Python全局变量只包含
- 设置在流程初始化期间设置的变量
- 缓存数据(会话/用户无关)
它解释了各种运行模式,并给出了一些关于数据范围和共享的一般指导原则。我认为预分叉或线程化模式取决于Apache的安装和配置,还是指其他模式?预分叉是Python的首选方法。您可以执行线程安装,但Python不喜欢线程。详细回答:在Python web应用程序中使用线程是很好的。大多数情况下,应用程序都在等待I/O,因此GIL不是人们所关心的问题。对于需要高CPU的任务,GIL更为不利。去读书