Python最准确的时间测量方法(毫秒)

我需要测量我的代码的某些部分所花费的时间。在强大的服务器上执行我的代码时,我得到了 10 个不同的结果


我尝试比较用time.time()、time.perf_counter()、time.perf_counter_ns()和测量time.process_time()的时间time.process_time_ns()。


import time


for _ in range(10):

    start = time.perf_counter()

    i = 0

    while i < 100000:

        i = i + 1

    time.sleep(1)

    end = time.perf_counter()

    print(end - start)

我期望在执行相同的代码 10 次时,结果是相同的(结果至少有 1 毫秒的分辨率)例如。1.041XX 而不是 1.030 秒 - 1.046 秒。


When executing my code on a 16 cpu, 32gb memory server I'm receiving this result:


1.045549364

1.030857833

1.0466020120000001

1.0309665050000003

1.0464690349999994

1.046397238

1.0309525370000001

1.0312070380000007

1.0307592159999999

1.046095523


Im expacting the result to be: 


1.041549364

1.041857833

1.0416020120000001

1.0419665050000003

1.0414690349999994

1.041397238

1.0419525370000001

1.0412070380000007

1.0417592159999999

1.041095523


慕丝7291255
浏览 316回答 2
2回答

慕的地10843

你的期望是错误的。如果要测量代码平均时间消耗,请使用timeit模块。它多次执行您的代码并在一段时间内取平均值。您的代码具有不同运行时的原因在于您的代码:time.sleep(1)&nbsp;&nbsp;#&nbsp;ensures&nbsp;(3.5+)&nbsp;_at&nbsp;least_&nbsp;1000ms&nbsp;are&nbsp;waited,&nbsp;won't&nbsp;be&nbsp;less,&nbsp;might&nbsp;be&nbsp;more你在一个紧密的循环中调用它,导致累积差异:引用time.sleep(..) 文档:在给定的秒数内暂停执行调用线程。该参数可以是一个浮点数,以指示更精确的睡眠时间。实际的挂起时间可能少于请求的时间,因为任何捕获的信号都会在执行该信号的捕获例程后终止 sleep()。此外,由于系统中其他活动的调度,暂停时间可能比请求的时间长任意量。在 3.5 版更改:即使睡眠被信号中断,该函数现在至少睡眠 sec,除非信号处理程序引发异常(有关基本原理,请参见 PEP 475)。强调我的。

牧羊人nacy

由于系统的调度,在每次循环迭代中执行代码不会花费相同的时间(系统会暂停您的进程以执行另一个进程然后返回它......)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python