【问题标题】:Is this the right way to measure round-trip time?这是衡量往返时间的正确方法吗?
【发布时间】:2014-04-09 23:45:13
【问题描述】:

我需要比较几个 CDN 服务,所以我写了一个简短的 python 脚本来重复发送 get 请求到部署在这些 CDN 上的资源,并记录往返时间。我在不同城市的几台 PC 上运行脚本。 我就是这样做的:

t0 = time.clock()
r = requests.get(test_cdn_url)
t1 = time.clock()
roundtrip = t1-t0 # in seconds

对于大多数请求,往返时间在 1 秒:200-500 毫秒内,但偶尔会报告在几秒内完成的请求:3-5 秒,一次 9 秒。

是这样吗,还是我使用了错误的工具来测量?换句话说,requests lib 是否做了一些使指标完全错误的事情(缓存或一些重量级操作)?

【问题讨论】:

  • 不会添加答案,因为我不确定您的指标是否错误,但我会使用 timeit 模块。
  • Python 代码中的分号不是必需的,它会降低代码的可读性。
  • @StevenRumbalski 你是对的,旧习惯很难改掉 :(

标签: python performance web cdn python-requests


【解决方案1】:

Response 对象提供了一个elapsed 属性:

发送请求和到达之间经过的时间量 响应(作为时间增量)

您的代码将如下所示:

r = requests.get(test_cdn_url)
roundtrip = r.elapsed.total_seconds()

【讨论】:

    【解决方案2】:

    如果您担心requests 正在做任何重量级(或缓存)的事情,您可以随时使用urllib

    nf = urllib.urlopen(url)
    t0 = time.time()
    page = nf.read()
    t1 = time.time()
    nf.close()
    
    roundtrip = t1 - t0
    

    或者,如果您在请求中包含 Cache-Control: no-cache 标头,则应确保在此过程中不会发生缓存 - 并且您的原始代码应有效地为请求计时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多