gpt4 book ai didi

python - Apache + mod_wsgi 交互

转载 作者:太空狗 更新时间:2023-10-29 17:19:19 24 4
gpt4 key购买 nike

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

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

  1. 什么是 WSGIDaemonProcess,谁实际使用 python 子解释器调用我的 Django 应用程序?
  2. 如果我的 Django 应用程序在单个 Apache 子进程中允许多个线程的模式下运行 - 这是否意味着多个请求可以同时访问我的应用程序?如果是这样 - 设置模块级变量(比如用户 ID 变量)之类的操作是否会被其他并行请求覆盖并导致非线程安全行为?
  3. 对于上述情况,使用 Python 的全局解释器锁,线程实际上会并行执行吗?

最佳答案

每个要点的答案。

1 - WSGIDaemonProcess/WSGIProcessGroup 表示 mod_wsgi 应该 fork 一个单独的进程来运行 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 将被释放。这意味着在较低层实际写回响应数据并不会阻止其他线程运行。

关于python - Apache + mod_wsgi 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7968840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com