3

我已经在 apache 上部署了一个 wsgi 应用程序,并且我已经像这样配置它: WSGIDaemonProcess wsgi-pcapi user= group= processes=2 threads=15

重新启动 apache 后,我正在计算线程数: ps -efL | grep | grep -c httpd

本地 apache 只运行一个 wsgi 应用程序,但我得到的数字是 36,我不明白为什么。我知道有 2 个进程和 15 个线程,这意味着:15*2+2=32 那么为什么我还有 4 个呢?

4

1 回答 1

2

您的意思是为什么每个 mod_wsgi 守护进程有 3 个额外的。

对于您的配置,将创建 15 个新线程来处理请求。一个过程中的其他 3 个是由于:

  1. 进程启动的主线程。它将等到收到适当的信号以关闭该过程。
  2. 一个监视器线程,它检查某些事件是否发生,并将通知进程关闭。
  3. 一个死锁线程,用于检查 Python 解释器中是否发生了死锁。如果确实发生,它将发送线程 (2) 将检测到的事件。然后线程 (2) 将向进程发送信号以退出。该信号将被线程 (1) 检测到,然后线程将优雅地退出进程并尝试正确清理。

因此,额外的线程都是为了确保整个系统在可能发生的各种情况下非常健壮。再加上确保当进程关闭时 Python 子解释器被正确销毁,以允许 atexit 注册的 Python 代码运行以进行自己的清理。

于 2013-05-10T11:04:18.273 回答