可能你還不知道你的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