Windows上针对CPU密集型应用的Python WSGI部署
我在Windows上部署一个CPU占用高的Python-WSGI应用程序,有哪些选择呢?
这个应用程序在处理图像时非常依赖多个CPU,但由于GIL的限制,它无法充分利用这些CPU。
我的理解是:
mod_wsgi在Windows上不支持WSGIDaemonProcess,而Apache本身只能运行一个进程。
所有基于fork的解决方案(比如flup、spawning、gunicorn)只在Unix系统上有效。
还有其他我可能遗漏的部署选项吗?
附注:我在serverfault上问过这个问题,但有人建议我在这里问。
2 个回答
0
这可能会有点麻烦,但你可以使用subprocess模块自己启动工作进程。我很确定Popen.wait()和/或Popen.communicate()应该会释放全局解释器锁(GIL)。不过,你还是得考虑创建进程的开销,所以可能和标准的CGI相比,效果不会好太多。
另一个选择是让独立的服务器/工作进程一直运行,并使用某种形式的进程间通信(IPC),不过这并不是一个简单的选择。可以看看multiprocessing模块,也可以考虑Pyro。
1
我成功地使用了 isapi-wsgi 在Windows的IIS上部署WSGI网页应用(我假设你在Windows上部署,所以IIS是一个选择)。
首先,创建一个IIS应用程序池来托管你的应用,并把它配置成一个Web Garden(在属性 | 性能 | 最大工作进程数里设置)。
需要说明的是:我自己从来没有用过这个功能(我一直使用默认的应用程序池配置,最大工作进程数是1)。但我理解这个设置可以启动更多的进程来处理请求。