V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wanliyi
V2EX  ›  问与答

如何才能在 Python 中提高得到 https 响应速度

  •  
  •   wanliyi · 2022-01-16 11:02:43 +08:00 · 2337 次点击
    这是一个创建于 1032 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我用 python 发送一个 https 请求,收到响应居然花了接近 1s ,显然有点不能接受,有什么好的解决方案吗,不论用多大的带宽速度也都在 1s 左右

    18 条回复    2022-01-17 19:11:23 +08:00
    makdon
        2
    makdon  
       2022-01-16 11:15:15 +08:00
    从哪里请求哪里的,https 握手就化不少时间了,如果请求国外的,1s 也确实差不多了
    ClericPy
        3
    ClericPy  
       2022-01-16 11:16:49 +08:00
    你只给个结果不给线索, 只能胡猜了...

    1. 复用连接
    2. 禁用 ssl
    3. 开高并发, TCPConnector limit 开大点
    wanliyi
        4
    wanliyi  
    OP
       2022-01-16 11:19:56 +08:00
    @makdon 请求 alipay.com ,返回网页 html
    wanliyi
        5
    wanliyi  
    OP
       2022-01-16 11:21:30 +08:00
    @ClericPy 只请求单次开并发应该没用吧
    whenov
        6
    whenov  
       2022-01-16 11:31:29 +08:00
    @wanliyi 只请求单次为啥 1s 不能接受啊
    wanliyi
        7
    wanliyi  
    OP
       2022-01-16 11:34:54 +08:00
    @whenov ttfb500ms 不就应该算过长了吗
    pengtdyd
        8
    pengtdyd  
       2022-01-16 11:55:36 +08:00
    换 C
    wanliyi
        9
    wanliyi  
    OP
       2022-01-16 14:04:15 +08:00 via iPhone
    @pengtdyd 自己写 socket ?
    zwy100e72
        10
    zwy100e72  
       2022-01-16 15:13:24 +08:00
    可以从几个方向排查

    1. DNS: 楼主这 1s 时间中有包含 DNS 查询时间吗?如果有的话,通过 dig 命令确认 DNS 响应时间是不是过大,如果 DNS 延迟较高,可通过更换其他 DNS 或者本地 DNS 缓存的方式来降低 DNS 的影响

    2. 连接时的开销:请求 alipay.com 时会涉及到 TCP 连接、301 跳转、TCP 重连、TLS 协商等流程,可通过抓包分析是否这个阶段开销过高,通过优化连接时参数来降低影响;也可以通过连接复用降低影响

    3. 楼主的目标:楼主需要明确需求,是“单次连接时长小于 N ms”,还是 “多次连接,p50 / p90 / p99 延迟指标小于 N ms”。

    4. 程序本身的开销:如果连接时 CPU 占用过高,可以用相关 profiler 工具分析热点,尝试通过更换效率更高的框架来降低开销

    最后,当你在讨论 “1s” 这个指标时,有可能不是带宽瓶颈。如果带宽不是瓶颈,那么再增加带宽也是无法加速连接的。
    deplivesb
        11
    deplivesb  
       2022-01-16 15:17:46 +08:00
    gesse
        12
    gesse  
       2022-01-16 15:39:24 +08:00
    @deplivesb
    破案了
    wanliyi
        13
    wanliyi  
    OP
       2022-01-16 16:08:50 +08:00 via iPhone
    @deplivesb 额,当然不是直接这样,是 get 支付界面
    wanliyi
        14
    wanliyi  
    OP
       2022-01-16 16:09:07 +08:00 via iPhone
    @zwy100e72 好的,我需要排查一下,谢谢
    wanliyi
        15
    wanliyi  
    OP
       2022-01-16 16:18:02 +08:00 via iPhone
    @zwy100e72 单次请求 waitting(TTFB)时间能达到 800ms ,请问这个阶段时间是无法优化的吗
    documentzhangx66
        16
    documentzhangx66  
       2022-01-17 00:22:42 +08:00
    deplivesb 这位老哥给了你一条很好的思路。

    你可以在每一处关键位置,加上时间戳,然后去百度开一台按分钟计费的云主机,接着对比一下自己 PC 与云主机的每个时间戳。

    按分钟计费的云主机,我跑一次这种简单测试,就几毛钱成本...
    aladdinding
        17
    aladdinding  
       2022-01-17 09:09:38 +08:00
    curl -v 先看看 curl 的时间
    0312birdzhang
        18
    0312birdzhang  
       2022-01-17 19:11:23 +08:00 via iPhone
    在 sailfishos 上开发 app 遇到过,在 dns 解析花了很长时间
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3522 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:43 · PVG 12:43 · LAX 20:43 · JFK 23:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.