部署Django(fastcgi, apache mod_wsgi, uwsgi, gunicorn)
有人能解释一下apache的mod_wsgi在守护进程模式和django的fastcgi在多线程模式之间的区别吗?我觉得它们都是用线程来处理并发的。
更新:
我在比较django自带的fastcgi(./manage.py method=threaded maxchildren=15)和mod_wsgi的“守护进程”模式(WSGIDaemonProcess example threads=15)。它们都是使用线程并获取全局解释器锁(GIL),我说得对吗?
更新 2:
如果它们都很相似,那apache的mod_wsgi相比fastcgi有什么好处呢?我看到fastcgi有以下优点:
- 我们不需要apache
- 我们消耗的内存更少
- 我注意到fastcgi的开销更小
更新 3:
我现在对nginx + uwsgi很满意。
更新 4:
我现在对nginx + gunicorn也很满意 :)
1 个回答
其实,你不一定要用线程来处理同时的请求,这主要看你怎么设置。如果你愿意,可以用多个进程,每个进程只用一个线程。
如果想了解更多关于mod_wsgi的进程和线程模型,可以看看这里:
http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading
这些模型有点相似,不过mod_wsgi自己管理进程。而在FASTCGI中,进程管理的情况就要看你用的是什么FASTCGI的托管机制,你没有说明这一点。
另一个不同之处是,FASTCGI需要一个单独的桥接工具,比如flup,来连接FASTCGI和WSGI,而mod_wsgi则不需要任何桥接,因为它本身就支持WSGI接口。
最后,FASTCGI的进程是从某个管理进程或网络服务器中执行/分叉出来的,这取决于你使用的托管机制。而在mod_wsgi中,进程只是从Apache的父进程中分叉出来。一般来说,这个区别不是特别重要,但还是有一些影响。
还有其他的不同之处,不过主要是因为mod_wsgi提供了比FASTCGI托管机制更多的功能和配置选项。
总之,你的问题有点模糊,能不能更具体一点,告诉我你想了解什么,或者想对比哪方面?这样我才能给出更有针对性的回答。