我需要测量我的代码的某些部分所花费的时间。在强大的服务器上执行我的代码时,我得到了 10 个不同的结果我尝试比较用time.time()、time.perf_counter()、time.perf_counter_ns()和测量time.process_time()的时间time.process_time_ns()。import timefor _ 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.0455493641.0308578331.04660201200000011.03096650500000031.04646903499999941.0463972381.03095253700000011.03120703800000071.03075921599999991.046095523Im expacting the result to be: 1.0415493641.0418578331.04160201200000011.04196650500000031.04146903499999941.0413972381.04195253700000011.04120703800000071.04175921599999991.041095523
2 回答

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