Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中apache/modwsgi应用程序的内存模型?_Python_Apache_Memory Management_Mod Wsgi - Fatal编程技术网

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

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全局对象。重新导入模块时,将使用相同的全局变量

在常规应用程序(如Windows上)中,当在全局级别上创建对象/变量时,整个程序在整个程序运行期间都可以使用该对象/变量

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

a) 那么,在apache/modwsgi下运行的python呢?关于记忆,这是如何工作的


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

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

pythonweb服务器不执行线程,而是执行预先分叉的进程。因此,Apache没有线程问题

Apache下Python进程的生命周期取决于。Apache设置了生成、保留和终止子进程的数量。这意味着您可以在Python进程中使用globals进行缓存(进程内缓存),但该进程可能会在任何请求后终止,因此您无法将任何持久数据放入globals中。但是这个过程不一定需要终止,在这方面Python比PHP效率更高(不是对每个请求都解析源代码,但是您需要让服务器处于重新加载模式,以便在开发过程中读取源代码更改)

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

通常Python全局变量只包含

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

  • 缓存数据(会话/用户无关)


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


它解释了各种运行模式,并给出了一些关于数据范围和共享的一般指导原则。

我认为预分叉或线程化模式取决于Apache的安装和配置,还是指其他模式?预分叉是Python的首选方法。您可以执行线程安装,但Python不喜欢线程。详细回答:在Python web应用程序中使用线程是很好的。大多数情况下,应用程序都在等待I/O,因此GIL不是人们所关心的问题。对于需要高CPU的任务,GIL更为不利。去读书