mod_wsgi如何实际工作?

dem*_*guy 8 python multithreading mod-wsgi wsgi

即使在阅读本文档之后,我真的对mod_wsgi中的多个线程感到困惑

主要问题是,mod_wsgi如何调用我的python脚本?

为了使我的问题清楚,我将在下面的问题中总结

假设我的服务器配置如下:

WSGIDaemonProcess XXX.com processes=12 threads=20 display-name=%{GROUP}

WSGIProcessGroup XXX.com

WSGIScriptAlias /sign /XXX/Http/upload.wsgi
Run Code Online (Sandbox Code Playgroud)

我正在使用 prefork MPM

/XXX/Http/upload.wsgi看起来像这样

class app(object):

def __init__(self):
    pass

def __call__(self, environ, start_response):
    temp_unsign = tempfile.mkdtemp()
    temp_signed = tempfile.mkdtemp()

    try:
        response_headers = [('Content-type', 'text/plain;charset=UTF-8'),('Content-Length', str(len('123')))]
        status = '200 OK'
        start_response(status, response_headers)

        return ['123']
    finally:
        shutil.rmtree(temp_unsign)
        shutil.rmtree(temp_signed)
Run Code Online (Sandbox Code Playgroud)

application = app()

他的问题是:

  1. 如果同时有来自不同IP的5个请求,那么会有多少个app实例?一个例子?或者每个请求一个实例
  2. 如果来自同一IP和同一台计算机的5个请求同时怎么办?
  3. 所有5 __call__种方法都在5个不同的线程中运行吗?

我问这个是因为No such directory执行时我总是遇到错误shutil.rmtree.

当然,我无法理解mod_wsgi如何在多线程中实际工作