为何你还在用嵌入式的方式来使用mod_wsgi?

可能你还不知道你的python 网站是否跑在embedded mod of  mod_wsgi,无论你知不知道请看下去,由于大部分人都是在这个工做模式下运行的。嵌入式顾名思义就是运行在apache的子进程下,daemon不是。因此无论出于什么考虑,daemon mode是一个更好的选择。html

若是deamon mod是一个更好的选择,为何没有默认提供?

不幸的是嵌入式做为默认是由于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

相关文章
相关标签/搜索