【问题标题】:How To Get Absolute Time Differences Between API Calls With Millisecond Precision?如何以毫秒精度获取 API 调用之间的绝对时间差异?
【发布时间】:2016-11-09 06:25:37
【问题描述】:

我有需要协调 API 调用时间的线程 API 调用。

应用程序的性质意味着我需要在最大 API 命中率下运行非常薄的利润。

目前,我正在使用存储上次 API 调用时间的共享对象来协调 API 调用从本地机器到远程 API 的时间。

为了解决本地机器和远程 API 之间的连接速度差异,我正在使用回退响应测试,如果 2 个调用过早地命中 API,则重新提示 API 调用,从而导致响应错误。 (虽然我真的不喜欢这个解决方案......如果你有更好的解决方案,请加入。)

问题:

time.time() 在所有平台上都没有给我足够的精度。我需要毫秒精度。

time.clock() 据我了解处理时间,而不是绝对时间。因此,如果 CPU 处于不同的负载下,它将根据这些负载差异从绝对时间开始计算。这是正确的吗?

因此,考虑到这一点,以毫秒精度获得 API 调用之间的时间差异的最佳方法是什么?

【问题讨论】:

  • 据我所知,并非所有 API 调用都返回时间戳。是否有我必须在请求中设置的参数才能在每次调用时获取时间戳?

标签: python multithreading api python-3.x


【解决方案1】:

精度仍取决于平台,但您应该使用timeit.default_timer

来自docs

以特定于平台的方式定义默认计时器。在 Windows 上,time.clock() 的粒度为微秒,但 time.time() 的粒度为 1/60 秒。在 Unix 上,time.clock() 的粒度为 1/100 秒,而 time.time() 则更精确。在任一平台上,default_timer() 测量的是挂钟时间,而不是 CPU 时间。这意味着在同一台计算机上运行的其他进程可能会干扰计时。

【讨论】:

  • 我不确定你的意思。如果您禁用 API 所依赖的网络连接,timeit 当然会提供不正确的时间,但任何事情都会...
猜你喜欢
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 2015-10-17
  • 1970-01-01
相关资源
最近更新 更多