如果我们有办法通过相同的 gunicorn 实例运行大量应用程序,以便它们使用相同的 Python 解释器,您认为这是一个好主意吗?
至少对我来说,这将非常有用,因为它会节省大量 RAM,因为我有许多小型应用程序(负载非常低)在同一台机器上运行。
我认为这种行为最好由最终用户解决。 与传统的 Web 服务器相比,gunicorn 处理“多个站点”的方式有明显的不同。
我建议使用一些简单的 python 库,比如 werkzeug,让你的两个应用程序响应不同的路由。
我必须同意 jbergstroem 这不属于核心。 但我确实继续添加了一个示例,概述了如何使用 Routes 完成此任务:
http://github.com/benoitc/gunicorn/blob/master/examples/multiapp.py
而不是每个应用程序都有一个特定的挂载点,是否有可能有一个虚拟主机的例子?
是的,这是完全可能的。 您可以编写一个从环境 ['HTTP_HOST'] 到应用程序的简单映射。
我认为这可以用 gunicorn 构建,你怎么看?
这可能是 gunicorn 的一些可选部分,比如贡献的东西,是的。
我认为最好作为具有单独配置的独立多路复用器应用程序。 Django/Paste 专业化也必须去那里。 像这样:
$ gunicorn wsgi_multi django:project1 myblog.wsgi:wsgi_app anotherapp.foo
在这里,gunicorn 只运行一个应用程序 wsgi_multi,其他参数通过一些特殊的 API 传递给它。 或者通过配置或其他方式。
我花了很多时间试图写出类似于这张票中建议的内容。 首先,我尝试使用基于 HTTP_HOST 切换 virtualenv 的代码。 原来你真的不能在纯 python 中停用 virtualenvs,所以这是一个洗涤。
然后我想:也许我们可以只要求它是一个单一的 virtualenv,所以我编写了基于 HTTP_HOST 切换到不同 WSGI 应用程序的代码,结果发现你不能并排运行两个 django 应用程序,因为 django 保留了一个到处都有数量惊人的全局变量。
所以基本上,我要说的是它并不像上面建议的那样容易甚至可行。
也许做某种负载平衡的事情更可行,其中工作人员根据应用程序在不同的虚拟环境中运行,并且中央 gunicorn master 确保需要更多工作人员的应用程序得到它们? 写起来可能并不容易或有趣:(
我真的很想清理 django 以使这种事情成为可能......
最有用的评论
我必须同意 jbergstroem 这不属于核心。 但我确实继续添加了一个示例,概述了如何使用 Routes 完成此任务:
http://github.com/benoitc/gunicorn/blob/master/examples/multiapp.py