[英]Measuring long time intervals in python
在搜索了 Python 3.x 中测量时间的不同方法后,我决定使用time模块中的perf_counter()函数。 当我使用一个需要几秒钟才能运行的函数对其进行测试时,它运行良好,但是我想从中提取计时结果的代码需要数十个小时才能运行。
今天我得到了结果,令我惊讶的是计时结果的数量级是几分之一秒,这太荒谬了。 因此,我来问你为什么会发生这种情况,以及如何在 Python 3.x 中准确测量长时间间隔。
使用的代码如下:
optimization_times = []
for i in range(30):
# Search parameters on train set
print("Round %d" % i)
time_start = time.perf_counter()
solution = metaheuristic.optimize()
time_end = time.perf_counter()
# Keep time spent
optimization_times.append(time_end - time_start)
操作系统:Ubuntu 18.04
先感谢您。
time.perf_counter()
→ 浮动返回性能计数器的值(以小数秒为单位),即具有最高可用分辨率的时钟以测量短持续时间。 它确实包括睡眠期间经过的时间,并且是系统范围的。 返回值的参考点未定义,因此只有连续调用结果之间的差异才有效。
——
“什么是小数秒?”
小数秒是不是整数的时间部分。 所以如果你有一个像 12345678.9 这样的时间,那么小数秒就是 0.9
(巴塞尔·斯塔林克维奇)
可能的解决方案是timeit
:
import timeit
import time
def func():
time.sleep(0.05)
timeit.timeit(lambda: func(), number=10)
输出:
0.528169795999986
你看到了一个环绕。
从 文档:
...具有最高可用分辨率的时钟,用于测量短时间。
如果您的时间间隔为数十小时,则应坚持使用time.time()
,它有足够的分辨率满足您的需求。
如果您认为您确实需要大量的精度,那么将 time.time() 与 perf_counter() 结合使用,并且侧面还有一个程序会定期记录这两个值,以便您可以将 perf_counter 偏移量同步到全球时间。 这样的日志对应于使您的 48 位计数器宽几位,它可以让您观察每个环绕事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.