在Python 3.x中搜索了测量时间的不同方法之后,我决定使用时间模块中的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)操作系统: 乌班图 18.04提前感谢您。
2 回答

幕布斯6054654
TA贡献1876条经验 获得超7个赞
你看到了一个环绕。
从文档中:
...具有最高可用分辨率的时钟,用于测量较短的持续时间。
如果您的间隔是几十个小时,您应该坚持使用 ,它有足够的分辨率来满足您的需求。time.time()
如果你认为你真的需要一个疯狂的精度数字,那么将time.time()与perf_counter()结合起来,并且旁边还有一个程序定期记录这两个值,这样你就可以同步perf_counter偏移量到全球时间。这样的日志对应于使 48 位计数器宽几位,它允许您观察每个环绕事件。

慕莱坞森
TA贡献1810条经验 获得超4个赞
time.perf_counter()
→浮子返回性能计数器的值(以秒的小数部分为单位),即具有最高可用分辨率的时钟,用于测量较短的持续时间。它确实包括睡眠期间经过的时间,并且是系统范围的。返回值的参考点是未定义的,因此只有连续调用的结果之间的差异才有效。
--
“什么是小数秒?”
小数秒是时间中不是整数的部分。因此,如果您有像12345678.9这样的时间,则小数秒是0.9
(巴西尔·斯塔林凯维奇)
可能的解决方案是及时的
:
可能的解决方案是及时的:
import timeit
import time
def func():
time.sleep(0.05)
timeit.timeit(lambda: func(), number=10)
输出:
0.528169795999986
添加回答
举报
0/150
提交
取消