猿问

在蟒蛇中测量长时间间隔

在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


提前感谢您。


杨魅力
浏览 85回答 2
2回答

幕布斯6054654

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

慕莱坞森

time.perf_counter() →浮子返回性能计数器的值(以秒的小数部分为单位),即具有最高可用分辨率的时钟,用于测量较短的持续时间。它确实包括睡眠期间经过的时间,并且是系统范围的。返回值的参考点是未定义的,因此只有连续调用的结果之间的差异才有效。--“什么是小数秒?”小数秒是时间中不是整数的部分。因此,如果您有像12345678.9这样的时间,则小数秒是0.9(巴西尔·斯塔林凯维奇)可能的解决方案是及时的:可能的解决方案是及时的:import timeitimport timedef func():    time.sleep(0.05)timeit.timeit(lambda: func(), number=10)输出:0.528169795999986
随时随地看视频慕课网APP

相关分类

Python
我要回答