【问题标题】:Time measuring accuracy时间测量精度
【发布时间】:2018-03-17 18:02:36
【问题描述】:

通过实现线

start_time = time.time()

在我的代码开头和

print("%f seconds" % (time.time() - start_time))

在我的代码结束时,我一直在测量我的脚本的性能(可能需要几个小时才能运行)。我听说这可能不是最好的方法,因为它不准确。它有多准确,是否有更好的选择?

【问题讨论】:

  • 在小时的时间尺度上,任何亚秒级精度似乎都无关紧要。你希望你的时间有多准确?
  • 忽略那个数字。我来寻求最佳方法的建议。干杯
  • “最佳方法”有些主观。最好的方法可能要花费 20 万美元,因此可能不是您钱包的最佳方法。另外,您想测量挂钟时间、CPU 时间吗?请让您的问题更实际。
  • 好点。抱歉我的含糊不清。
  • datetime.datetime 实例具有microsecond 属性,如果您使用datetime.datetime.now(),将使用该属性。 timedelta 实例也是如此。time.time() 的准确性取决于操作系统——在某些情况下不到 1 秒。

标签: python python-2.7 python-3.x performance time


【解决方案1】:

尝试使用日期时间

from datetime import datetime
startTime = datetime.now()
#CODE
print("Time taken:",datetime.now() - startTime)

【讨论】:

  • 您能否具体说明为什么在准确性方面这是一个更好的选择?谢谢
【解决方案2】:

试试这个,标准库中的timeit:

from timeit import default_timer as timer
start_time = timer()
end_time = timer()    
print(end_time - start_time)                                                                                                                                           
logger.info("Duration was {}".format(end_time - start_time)) 

default_timer 的文档很有趣,应该在答案中真正引用:“以特定于平台的方式定义默认计时器。在 Windows 上,time.clock() 具有微秒粒度,但 time.time( ) 的粒度是 1/60 秒。在 Unix 上,time.clock() 的粒度是 1/100 秒,而 time.time() 更精确。在任一平台上,default_timer() 测量挂钟时间,而不是 CPU 时间。这意味着在同一台计算机上运行的其他进程可能会干扰计时。

【讨论】:

  • 您能否具体说明为什么在准确性方面这是一个更好的选择?谢谢
  • default_timer 的文档很有趣,应该在答案中真正引用:“以特定于平台的方式定义默认计时器。在 Windows 上,time.clock() 有微秒粒度,但 time.time() 的粒度是 1/60 秒。在 Unix 上,time.clock() 的粒度是 1/100 秒,而 time.time() 更精确。在任一平台上, default_timer() 测量的是挂钟时间,而不是 CPU 时间。这意味着在同一台计算机上运行的其他进程可能会干扰计时。”
  • 非常感谢。我将编辑您的答案并接受它。
猜你喜欢
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 2012-12-29
  • 2010-10-04
  • 1970-01-01
相关资源
最近更新 更多