繁体   English   中英

在python中测量长时间间隔

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM