【问题标题】:Measure website load time with Python requests使用 Python 请求测量网站加载时间
【发布时间】:2012-06-24 23:00:12
【问题描述】:

我正在尝试构建一个工具来测试我的互联网连接延迟,更具体地说是网站加载时间。我想到了使用 python requests 模块作为加载部分。

问题是,它没有内置功能来衡量获得完整响应所需的时间。为此,我想我会使用timeit 模块。

我不确定的是,如果我像这样运行 timeit:

t = timeit.Timer("requests.get('http://www.google.com')", "import requests")

我真的在测量响应到达所需的时间,还是构建、发送、接收请求等所需的时间?我猜我可能会忽略执行时间,因为我正在测试延迟很长(~700 毫秒)的网络?

有没有更好的方式以编程方式做到这一点?

【问题讨论】:

    标签: python networking delay python-requests timeit


    【解决方案1】:

    最新版本的请求中有这样的功能:

    https://requests.readthedocs.io/en/latest/api/?highlight=elapsed#requests.Response.elapsed

    例如:

    requests.get("http://127.0.0.1").elapsed.total_seconds()
    

    【讨论】:

    • 以秒为单位获取响应时间:requests.get("http://127.0.0.1").elapsed.total_seconds()
    • 添加到 Micael Osl 的评论中:total_seconds() 是一个十进制数,似乎具有微秒精度。
    • 不要在客户端使用它来分析和优化您的代码。它只测量服务器的响应时间(这是 OPs 的问题)。 从发送请求到响应到达之间经过的时间量(时间增量)。此属性专门测量发送请求的第一个字节和完成对标头的解析之间所用的时间。因此,它不受响应内容或流关键字参数值的影响。 - 文档。
    • @GvS Python 3urllib3 怎么样?
    【解决方案2】:

    至于你的问题,应该是总时间

    1. 是时候创建请求对象了
    2. 发送请求
    3. 接收响应
    4. 解析响应(参见 Thomas Orozco 的评论)

    测量单个请求加载时间的其他方法是使用 urllib:

    nf = urllib.urlopen(url)
    start = time.time()
    page = nf.read()
    end = time.time()
    nf.close()
    # end - start gives you the page load time
    

    【讨论】:

    • + 4. 解析HTTP响应
    • 看起来很不错,但是看看我看到的一个例子1. start_timer = time.time() 2. Open Browser + Read Response 3. latency = time.time() - start_timer 会不会是同样的问题?
    • @cookM:我不认为这是问题,而是实时体验请求延迟的情况。事实上,它对许多更接近实际时间的请求进行平均。
    • #cookM:维基有更多关于分析加载时间的详细信息:code.google.com/p/multi-mechanize/wiki/AdvancedScripts
    • @pyfunc 刚刚看到你的编辑,我认为 sn-p 正是我想要的。我对 urllib 不太熟悉,但我猜当我发出 nf.read() 时,我正在做的是发送请求并将其恢复正确?
    【解决方案3】:

    response.elapsed 返回一个 timedelta 对象,其中包含从发送请求到响应到达所经过的时间。通常用于在某个时间点后停止连接是elapsed

    # import requests module 
    import requests 
      
    # Making a get request 
    response = requests.get('http://stackoverflow.com/') 
      
    # print response 
    print(response) 
      
    # print elapsed time 
    print(response.elapsed)
    

    输出:

    <Response [200]>
    0:00:00.343720
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 2017-09-03
      • 2020-09-11
      相关资源
      最近更新 更多