【问题标题】:run web app with gevent使用 gevent 运行 Web 应用程序
【发布时间】:2011-10-21 21:15:18
【问题描述】:

我想尝试使用 gevent 作为 Web 服务器和应用程序框架。我没有看到任何方法可以“重新启动”服务器或更新应用程序代码而不杀死并再次启动整个 python 应用程序。

这就是它的做法吗?也许这只是我理解与 apache 方式不同的范式的问题。

另外,作为一个半相关的问题,通过 gevent 运行 Web 服务器和站点/服务本身是否是一个好主意。我已经看到其他使用 gunicorn 作为服务器和 gevent 作为应用程序的实现,但从我看到的基准测试来看,gevent 作为服务器在扩展方面的性能远远优于 gunicorn。

【问题讨论】:

  • 如果您想直接运行 gevent 但即使在升级期间也保持服务器可用,一个解决方案是在两个 gevent 实例前面放置一个负载均衡器。 Nginx 可以简单地通过在上游定义中拥有两个服务器来充当负载均衡器。通过一次重新启动一个 gevent wsgi 服务器,您不会有停机时间。但是,与运行 gunicorn 相比,内存占用的小优势从长远来看并不值得,因为它增加了复杂性,恕我直言。
  • @DanielEriksson 好建议。

标签: python gevent gunicorn


【解决方案1】:

Gunicorn 有 3 个 gevent 工作者:

  • -k gevent(使用 gunicorn 的 HTTP 解析器)
  • -k gevent_pywsgi(使用 gevent.pywsgi 模块)
  • -k gevent_wsgi(使用 gevent.wsgi 模块)

gevent.wsgi 是一个基于 libevent 的快速 HTTP 服务器。

gevent.pywsgi 是用 Python 实现的 WSGI 服务器。

gevent.pywsgi存在的原因是libevent-http有一个few limitations,比如不支持keep-alive、streaming、ssl和websockets。

注意,新的alpha version (1.0a3) of gevent 使用libev 并且不包括基于libevent-http 的WSGI 服务器。目前,这里的 gevent.wsgi 是 gevent.pywsgi 的别名。

gevent 中的服务器类没有任何与进程管理、重启、重新加载等相关的功能。但是,这些功能对于部署是必需的。 Gunicorn 为 gevent 的 WSGI 服务器提供了这些功能。使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-03
    • 2021-03-09
    • 2018-03-28
    • 2013-01-16
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多