使用FastCGI或mod_python运行Django

时间:2008-10-28 23:16:23

标签: python django apache fastcgi

你会推荐哪个? 哪个更快,更可靠? apache mod_python或nginx / lighttpd FastCGI?

7 个答案:

答案 0 :(得分:21)

我已经完成了两项工作,并且Apache / mod_python更容易使用并且更稳定。但是这些天我跳到了Apache / mod_wsgi,这是我想要的一切以及更多:

  • 轻松管理守护程序进程。
  • 因此,更好的进程隔离(在同一个Apache配置中使用mod_python运行多个站点几乎总是会遇到麻烦 - 当您这样做时,环境变量和C扩展会跨站点泄漏)。
  • 简单的代码重新加载(设置正确,您只需触摸.wsgi文件即可重新加载而不是重新启动Apache。)
  • 更可预测的资源使用情况。使用mod_python,给定的Apache子进程'内存使用可以跳转很多。使用mod_wsgi它非常稳定:一旦加载完所有内容,你知道它将使用多少内存。

答案 1 :(得分:6)

使用FastCGI的lighttpd在名义上会更快,但实际上运行你的python代码所需的时间和它所做的任何数据库命中都会让你在网络服务器之间获得的任何性能优势都相形见绌。

如果你想在django之外编写像digest auth这样的代码,或者任何花哨的HTTP头获取/设置,那么mod_python和apache将为你提供更多的灵活性。也许你想使用apache的其他内置功能,比如mod_rewrite。

如果记忆是一个问题,那么远离apache / mod_python将会有很大帮助。 Apache倾向于使用大量的RAM,并且粘合到所有apache功能中的mod_python代码也占用了大量的内存空间。更不用说apache的多进程性质往往会消耗更多的RAM,因为每个进程都会增长到它最密集的请求的大小。

答案 2 :(得分:5)

带有mod_wsgi的Nginx

答案 3 :(得分:2)

就我个人而言,我已经将它与FastCGI合作了一段时间(大约6个月左右),并且在加载与mod___python相比的页面时,响应时间“似乎”更快。对我来说,关键的原因是我看不到一个明显的方法来从同一个apache / mod_python安装做多个站点,而FastCGI是一个相对明智的。

我没有进行过任何特别彻底的实验: - )

[编辑] 从经验来看,设置FastCGI可能是第一次有点痛苦。我一直有意写一个指南..!

答案 4 :(得分:2)

我正在使用它与nginx。不确定它是否真的更快,但肯定更少的RAM / CPU负载。此外,运行多个Django进程并让nginx将每个URL前缀映射到不同的套接字更容易。仍未充分利用nginx的memcached模块,但首次测试显示巨大的速度优势。

答案 5 :(得分:2)

还有mod_wsgi,它似乎比mod_python更快,守护进程模式的操作类似于FastCGI

答案 6 :(得分:2)

我推荐WSGI配置;我一直意味着放弃apache,但服务器上总会有一些似乎需要它的遗留应用程序。此外,WSGI应用程序生态学非常多样化,它允许在服务器和应用程序之间使用菊花链式WSGI“中间件”等巧妙的技巧。

但是,目前有known issues with some apps and apache mod_wsgi,特别是某些ctypes应用,所以如果你想尝试运行,请谨慎,比如geodjango广泛使用ctypes。我正在解决这些问题,我自己回到fastcgi。