【问题标题】:Why Use Gevent Pool to Manage Greenlet Connections in a Server?为什么使用 Gevent Pool 管理服务器中的 Greenlet 连接?
【发布时间】:2022-01-12 02:16:33
【问题描述】:

我正在使用一个 Python 服务器,它为与服务器的每个连接生成一个 greenlet。目前,服务器不使用 greenlet 池。虽然我的预感是使用池会提高性能(主要是响应时间和每秒请求的吞吐量),但在我实现 greenlets 池的反复试验中,似乎并没有比仅使用每个绿灯/连接的 Gevent.spawn()。

我见过this question, 这很有帮助,虽然我对greenlet 池的应用很好奇,比如服务器中的Gevent Pool,。这是一个有用的模式,一个线程池吗?或者,在服务器的情况下使用池是否无关紧要,因为 Greenlets 与线程相比是如此轻量级?

【问题讨论】:

    标签: python multithreading server gevent greenlets


    【解决方案1】:

    Greenlets 是轻量级的,但它们确实会消耗内存。因此,即使一个进程可以支持的 greenlet 数量将远远大于操作系统可以支持的线程数量,它们仍然需要付出代价。因此,池仍然是限制可以生成的 greenlet 数量的有用工具 - 但最好将其大小设置为比实际线程的限制大得多。

    此外,由于它们的协作多任务性质,每个请求的延迟(假设每个新请求都由一个新的 greenlet 处理)将随着 greenlet 的数量增加超过某个阈值而开始上升。当每个请求需要越来越多的时间才能完成时,需要在一次允许更多请求和创建糟糕的用户体验之间进行权衡。有时最好限制传入的负载并拒绝新请求 - 池是一种有用的方法。

    【讨论】:

    • 感谢您的回答! +1 了。让这个慢一点,以防社区有任何额外的贡献,但如果没有,我会标记为“接受”。
    猜你喜欢
    • 2019-04-10
    • 2011-11-09
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2018-12-23
    • 2013-05-21
    • 2012-12-09
    相关资源
    最近更新 更多