【问题标题】:How to count the threads and process of WSGI?如何统计WSGI的线程和进程?
【发布时间】:2013-05-10 09:35:44
【问题描述】:
我已经在 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 个呢?
【问题讨论】:
标签:
multithreading
wsgi
python-multithreading
【解决方案1】:
你的意思是为什么每个 mod_wsgi 守护进程有 3 个额外的。
对于您的配置,将创建 15 个新线程来处理请求。一个过程中的其他 3 个是由于:
- 进程启动的主线程。它将等到收到适当的信号以关闭进程。
- 一个监视器线程,用于检查某些事件是否发生,并会发出关闭进程的信号。
- 一个死锁线程,用于检查 Python 解释器中是否发生了死锁。如果确实发生,它将发送线程 (2) 将检测到的事件。然后线程 (2) 将向进程发送信号以退出。该信号将被线程 (1) 检测到,然后优雅地退出进程并尝试正确清理。
因此,额外的线程都是为了确保整个系统在可能发生的各种情况下都非常健壮。另外确保当进程关闭时,Python 子解释器被正确销毁,以允许 atexit 注册的 Python 代码运行以进行自己的清理。