【问题标题】:Python WSGI deployment on Windows for CPU-bound application在 Windows 上为 CPU 密集型应用程序部署 Python WSGI
【发布时间】:2010-10-25 07:34:15
【问题描述】:

在 Windows 上部署受 CPU 限制的 Python-WSGI 应用程序有哪些选择?

应用程序从多个 CPU(图像处理/编码)中受益匪浅,但 GIL 阻止它使用它们。

我的理解是:

  • mod_wsgi 不支持 Windows 上的 WSGIDaemonProcess 并且 Apache 本身只运行一个进程

  • 所有基于 fork 的解决方案(flup、spawning、gunicorn)仅适用于 unix

我还缺少其他部署选项吗?

PS:我asked that on serverfault但有人建议在这里问。

【问题讨论】:

    标签: python windows mod-wsgi wsgi


    【解决方案1】:

    我已成功使用isapi-wsgi 在 Windows IIS 上部署 WSGI Web 应用程序(我假设由于您在 Windows 上部署,因此可以选择 IIS)。

    创建一个 IIS 应用程序池以在其中托管您的应用程序并将其配置为 Web Garden(属性 | 性能 | 最大工作进程数)。

    免责声明:我自己从未使用过此功能(我一直使用默认的应用程序池配置,其中最大工作进程数为 1)。但据我了解,这将启动更多进程来处理请求。

    【讨论】:

    • 不,IIS 不是一个选项,它应该与 Apache 一起工作(本机或通过 FastCGI/HTTP)。
    • 好吧,由于 Windows 上的 Apache 仅支持一个多线程进程,我想如果您想从多个 CPU 中受益,您无法真正在 Apache 中托管您的应用程序。也许在 IIS 中托管您的应用程序,并从 Apache 进行反向代理?
    【解决方案2】:

    这会有点混乱,但您可以使用 subprocess 模块自己启动工作进程。我很确定 Popen.wait() 和/或 Popen.communicate() 应该释放 GIL。不过,您仍然有创建流程的开销,因此您可能不会比标准 CGI 获得很多/任何东西。

    另一种选择是让单独的服务器/工作进程始终运行并使用某种形式的 IPC,尽管这不是一个简单的选择。看看多处理模块,可能还有 Pyro。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多