有人能给我一个WSGI背后与其他Python网络接口方法的高层技术概述吗?
首先:
- 我明白什么是WSGI,以及如何使用它。
- 我知道“其他”方法(比如Apache的mod-python、fcgi等)是什么,以及如何使用它们。
- 我理解它们之间的实际区别。
我不明白的是,这些“其他”方法在后台是如何运作的,跟UWSGI相比有什么不同。比如说,你的服务器(Nginx等)是如何把请求转发给你的WSGI应用的?UWSGI是为每个转发过来的请求创建一个新的Python解释器吗?这些传统的方法和WSGI之间到底有多大的不同(除了WSGI提供的更简单的Python接口)?我错过了什么重要的点吗?
1 个回答
8
除了CGI以外,几乎每次请求都不会创建新的Python解释器。你可以看看这篇文章:
http://blog.dscpl.com.au/2009/03/python-interpreter-is-not-created-for.html
这篇文章是关于mod_python的,但同样适用于mod_wsgi和任何使用持久进程的WSGI托管机制。
另外,你也可以看看这篇:
http://www.python.org/dev/peps/pep-0333/#environ-variables
在这里你会找到一个叫做'wsgi.run_once'的变量的描述。这个变量用来告诉WSGI应用程序,当使用的托管机制只处理一个请求然后就退出时,比如CGI。你可以写一个简单的“你好,世界”应用程序,输出WSGI环境,看看它在你使用的环境中是什么样的。
同时,还要注意'wsgi.multiprocess'和'wsgi.multithread'这两个变量。它们告诉你是否在使用多进程服务器,这样就会有多个实例的应用程序同时处理请求。'wsgi.multithread'变量则告诉你这个进程是否在同一个进程中处理多个请求的并发线程。
如果你想了解更多关于Apache嵌入式系统的多进程和多线程模型,比如mod_python、mod_wsgi和mod_wsgi守护进程模式,可以查看: