Python 阿帕奇&x2B;mod_wsgi相互作用

Python 阿帕奇&x2B;mod_wsgi相互作用,python,apache,mod-wsgi,Python,Apache,Mod Wsgi,在发布本文之前,我已经在网上阅读了很多资源,包括wiki,但我对Apache进程/线程如何与mod_wsgi交互感到困惑 这是我目前的理解:可以将Apache配置为运行,以便一个或多个子进程可以处理传入的请求,并且可以将每个子进程配置为依次使用一个或多个线程来服务请求。从那以后,事情开始变得模糊起来。我的疑问是: 什么是WSGIDaemonProcess,谁真正使用python子解释器调用我的Django应用程序 如果我的Django应用程序在一个Apache子进程中允许多个线程的模式下运行,这

在发布本文之前,我已经在网上阅读了很多资源,包括wiki,但我对Apache进程/线程如何与mod_wsgi交互感到困惑

这是我目前的理解:可以将Apache配置为运行,以便一个或多个子进程可以处理传入的请求,并且可以将每个子进程配置为依次使用一个或多个线程来服务请求。从那以后,事情开始变得模糊起来。我的疑问是:

  • 什么是WSGIDaemonProcess,谁真正使用python子解释器调用我的Django应用程序
  • 如果我的Django应用程序在一个Apache子进程中允许多个线程的模式下运行,这是否意味着多个请求可以同时访问我的应用程序?如果是这样的话,那么像设置模块级变量(比如用户ID)这样的操作是否会被其他并行请求重写,从而导致非线程安全行为
  • 对于上面的例子,使用Python的全局解释器锁,线程实际上会并行执行吗

  • 每一点的答案

    1-WSGIDaemonProcess/WSGIProcessGroup指示mod_wsgi应该派生一个单独的进程,以便在中运行wsgi应用程序。这只是一个fork,而不是fork/exec,因此mod_wsgi仍然控制着它。当检测到URL映射到在守护进程模式下运行的WSGI应用程序时,Apache子工作进程中的mod_WSGI代码将代理请求详细信息到守护进程模式进程,其中mod_WSGI代码读取请求并调用到WSGI应用程序中

    2-是的,多个请求可以同时运行,并且希望同时修改模块全局数据

    3-对于在Python内部执行的时间来说,不,它们严格来说不是并行运行的,因为全局解释器锁意味着一次只能有一个线程执行Python代码。Python解释器将定期切换要运行的线程。如果其中一个线程调用C代码并释放GIL,那么至少在该线程处于该状态时,它可以与其他线程并行运行,以Python或C代码运行。例如,当调用Apache/mod_wsgi层以写回响应数据时,GIL被释放。这意味着在较低层上实际回写响应数据不会阻止其他线程运行