可能你还不知道你的python 网站是否跑在embedded mod of mod_wsgi,无论你知不知道请看下去,由于大部分人都是在这个工做模式下运行的。嵌入式顾名思义就是运行在apache的子进程下,daemon不是。因此无论出于什么考虑,daemon mode是一个更好的选择。html
不幸的是嵌入式做为默认是由于mod_wsgi在设计时采用了mod_python的作法,当时也就只有支持嵌入式。这也致使了程序跟apache处理其余静态文件同样来处理python的请求。python
虽而后来加入了更像Fastcgi工做的daemon方式后,嵌入式已经做为默认选择很难再改回来了,而在windows下尚未实现,若是改默认选择这会形成混淆。web
做为apache的子进程的还不是主要的问题,而是子进程是由apache用通用的MPM设置的来管理的。那么通用的MPM设置默认是服务于静态文件的。这些设置必然致使python的web程序必须经过占用大量内存才能运行的好。apache
PHP之因此在嵌入式下跑没问题是由于PHP就是干这个的。好比说在PHP中全部应用代码都高效的在每一个请求中从新加载并大量的根据这个场景作了优化。而Python做为一个通用的语言,在做为Web程序时启动会耗费大量的资源启动。而Python的特色致使他不可能像PHP那样预加载的方式去优化。因此在嵌入式下Python不可能像PHP同样高效。windows
(好吧这一段是废话,做者想恐吓你不搞好就会让全世界伤心)app
对不起这不是本文的重点。优化
如何肯定是否在嵌入式下跑?网站
请以下修改你的wsgi文件:设计
import sys
def application(environ, start_response):
status = '200 OK'
name = repr(environ['mod_wsgi.process_group'])
output = 'mod_wsgi.process_group = %s' % name
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]htm
输出若是是:
mod_wsgi.process_group = ''
那就是在嵌入式下了。
未完待续
参考英文原文:http://blog.dscpl.com.au/2012/10/why-are-you-using-embedded-mode-of.html