【问题标题】:Why avoid CGI for Python with LAMP hosting?为什么要避免使用 LAMP 托管的 Python 的 CGI?
【发布时间】:2010-10-12 09:49:55
【问题描述】:

我多年来一直在使用 PHP。最近我看到很多论坛帖子说 PHP 已经过时,现代编程语言更简单、更安全等等。

所以,我决定开始学习 Python。由于我习惯使用 PHP,我刚开始通过上传 .htaccess 文件来构建页面:

addtype text/html py
addhandler cgi-script .py

然后,我的示例页面如下所示:

#!/usr/bin/python 打印“内容类型:文本/html\n\n” 打印“html标签,更多的东西,等等。”

这很好用。但是,我在一篇文章中看到了一条评论,说 CGI 不是使用 Python 的最佳方式。当然,它没有提到最好的方法。

为什么使用 CGI 不是使用 Python 的最佳方式?有什么替代方案?

是否有一些完全不同的方式来设置一个简单的 Python 站点?我应该在 .htaccess 和 .py 文件之外查看一些完全不同的范例吗?

相关

【问题讨论】:

    标签: php python .htaccess cgi


    【解决方案1】:

    mod_wsgi 是正确的选择。它几乎在所有方面都优于 CGI。

    【讨论】:

    • 如果您可以在虚拟机或专用机器上控制自己的 LAMP 堆栈,那就太好了,但是您能否确定一个实际加载和启用 mod_wsgi 的共享托管服务提供商?
    • 不。但没有人明确询问共享主机。
    • 我同意 Yuval,但鉴于绝大多数托管用户使用共享托管帐户,我假设包括原始发帖人(因为他是通过 .htaccess 文件而不是他的虚拟主机配置执行此操作)。假设原始发布者具有对其 Web 服务的 root 访问权限,这难道不是同样有缺陷吗?也许是一个警告“几乎所有方面的 CGI,当然除了共享主机帐户的最常见情况,您将无法使用它”;-P
    【解决方案2】:

    经典 CGI 根本不是使用任何东西的最佳方式。使用经典 CGI 服务器必须为每个请求生成一个新进程

    对于 Python,您几乎没有其他选择:

    【讨论】:

    • 我不建议将 simplehttpserver 用于实际的生产 web 应用程序。更多的是在其他应用程序中拥有嵌入式网络服务器。作为替代品,我可以推荐cherrypy - cherrypy.org 吗?
    • 您还可以注意到,您可以使用不同的、更小的代理网络服务器,如 nginx 或 lighttpd 来代替 apache。
    • 对于共享主机服务用户——这可能意味着这篇文章的大多数读者——这个限制并不真正相关,因为这种共享主机配置总是使用 UID/GID 访问控制来分隔单个用户帐户因此总是为 any 脚本化 URI 生成一个单独的进程——PHP、Python 等等。
    【解决方案3】:

    真的,这只是一个效率问题 - CGI 为每个请求生成一个全新的进程,这对于它所做的事情来说是相当重量级的。

    PHP 也可以通过 CGI 运行,但 mod_php 将解释器嵌入到 apache 中。 正如 Yuval 所说,有一个 mod_pythonmod_wsgi 做同样的工作。

    【讨论】:

      【解决方案4】:

      除了其他人提出的建议之外,您确实应该考虑使用某种框架。您可以而且应该使用FastCGI、mod_python 或 mod_wsgi,但它们并不是真正适合您直接编写代码的。我可以建议以下其中一项吗?

      【讨论】:

      • +1:“我应该在 .htaccess 和 .py 文件之外查看一些完全不同的范例”
      • 我同时也在学习 Pylons,但是使用一个框架很好,我也可以用底层语言进行编程。
      【解决方案5】:

      Python 文档中有一个页面描述了advantages and disadvantages of the various possibilities

      mod_python

      (...) 这些就是为什么在编写新程序时应该避免使用 mod_python 的原因。

      WSGI

      Web 服务器网关接口 或 简称WSGI是目前最好的 Python网络的可能方式 编程。虽然它非常适合 程序员编写框架, 正常人不需要进去 直接联系。

      FastCGI 和其他东西

      如今,FastCGI 从未直接使用过。

      【讨论】:

      • FastCGI 被共享主机环境大量使用。我个人在家里使用 PHP 和 FastCGI(使用 nginx 而不是 apache)来处理一些事情。
      • 请注意,帖子说从不直接使用 FastCGI(大概在 Python 的上下文中)。这与我的经验非常一致。
      • 其实文档是这么说的。
      • 感谢您的链接,这正是我所需要的。
      【解决方案6】:

      为什么使用 CGI 不是使用 Python 的最佳方式?

      我会稍微支持 CGI。这对开发环境很有好处。

      连接起来很简单,您不必担心模块重新加载问题。性能自然很糟糕,但对于开发人员来说你不在乎。

      当然,您应该真正写入 WSGI 接口而不是直接写入 CGI。然后,您可以使用以下方法通过 CGI 进行部署:

      wsgiref.handlers.CGIHandler().run(application)
      

      并使用相同的应用程序对象通过 mod_wsgi 在生产环境中部署您喜欢的其他任何其他 WSGI 服务器,速度很重要(以及您希望它尽可能接近生产的测试环境)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        • 2018-11-13
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多