部署Django(fastcgi, apache mod_wsgi, uwsgi, gunicorn)

18 投票
1 回答
9337 浏览
提问于 2025-04-15 21:19

有人能解释一下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 个回答

10

其实,你不一定要用线程来处理同时的请求,这主要看你怎么设置。如果你愿意,可以用多个进程,每个进程只用一个线程。

如果想了解更多关于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托管机制更多的功能和配置选项。

总之,你的问题有点模糊,能不能更具体一点,告诉我你想了解什么,或者想对比哪方面?这样我才能给出更有针对性的回答。

撰写回答