wanliyi
V2EX  ›  问与答

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

  •  
  •   wanliyi · Jan 16, 2022 · 3057 views
    This topic created in 1613 days ago, the information mentioned may be changed or developed.

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

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

    1. 复用连接
    2. 禁用 ssl
    3. 开高并发, TCPConnector limit 开大点
    wanliyi
        4
    wanliyi  
    OP
       Jan 16, 2022
    @makdon 请求 alipay.com ,返回网页 html
    wanliyi
        5
    wanliyi  
    OP
       Jan 16, 2022
    @ClericPy 只请求单次开并发应该没用吧
    whenov
        6
    whenov  
       Jan 16, 2022
    @wanliyi 只请求单次为啥 1s 不能接受啊
    wanliyi
        7
    wanliyi  
    OP
       Jan 16, 2022
    @whenov ttfb500ms 不就应该算过长了吗
    pengtdyd
        8
    pengtdyd  
       Jan 16, 2022
    换 C
    wanliyi
        9
    wanliyi  
    OP
       Jan 16, 2022 via iPhone
    @pengtdyd 自己写 socket ?
    zwy100e72
        10
    zwy100e72  
       Jan 16, 2022
    可以从几个方向排查

    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  
       Jan 16, 2022
    gesse
        12
    gesse  
       Jan 16, 2022
    @deplivesb
    破案了
    wanliyi
        13
    wanliyi  
    OP
       Jan 16, 2022 via iPhone
    @deplivesb 额,当然不是直接这样,是 get 支付界面
    wanliyi
        14
    wanliyi  
    OP
       Jan 16, 2022 via iPhone
    @zwy100e72 好的,我需要排查一下,谢谢
    wanliyi
        15
    wanliyi  
    OP
       Jan 16, 2022 via iPhone
    @zwy100e72 单次请求 waitting(TTFB)时间能达到 800ms ,请问这个阶段时间是无法优化的吗
    documentzhangx66
        16
    documentzhangx66  
       Jan 17, 2022
    deplivesb 这位老哥给了你一条很好的思路。

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

    按分钟计费的云主机,我跑一次这种简单测试,就几毛钱成本...
    aladdinding
        17
    aladdinding  
       Jan 17, 2022
    curl -v 先看看 curl 的时间
    1daydayde
        18
    1daydayde  
       Jan 17, 2022 via iPhone
    在 sailfishos 上开发 app 遇到过,在 dns 解析花了很长时间
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5524 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 88ms · UTC 06:46 · PVG 14:46 · LAX 23:46 · JFK 02:46
    ♥ Do have faith in what you're doing.