You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用eventlet时requests能否被猴子补丁?性能慢问题咨询

问题解答

核心原因

eventlet默认的monkey_patch()不会对urllib3进行猴子补丁,而requests底层依赖urllib3,这就导致requests仍然使用原生的阻塞式网络调用,无法利用eventlet的协程切换能力,最终让请求池的并发效率大打折扣,甚至比串行还慢。

解决办法

  • 显式指定patch urllib3:必须在导入任何网络相关模块(包括requests)之前执行以下代码:
    import eventlet
    # 显式开启urllib3的猴子补丁
    eventlet.monkey_patch(urllib3=True)
    import requests
    
  • 直接使用green化的requests:跳过手动patch步骤,直接导入eventlet适配后的requests版本:
    from eventlet.green import requests
    import eventlet
    
    这种方式下,requests会自动使用eventlet的非阻塞网络组件,无需额外配置。

额外优化建议

  • 复用requests会话:使用requests.Session()来建立持久连接,减少HTTPS握手和TCP连接建立的开销,这对并发请求的速度提升很明显。
  • 合理设置池大小:eventlet Pool的大小不要盲目调大,建议根据目标服务器的并发限制和本地资源情况调整(比如10-20个worker起步测试),过大的池可能引发服务器限流或本地资源竞争。
  • 检查SSL配置:如果目标网站的SSL握手耗时过长,可以尝试在session中开启keep-alive,或者确保eventlet的SSL组件已被正确patch(显式指定urllib3=True后一般会自动处理)。

内容的提问来源于stack exchange,提问作者Pzhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:15:36