为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2022-06-02 15:27:02
我需要测量我的代码的某些部分所花费的时间。在强大的服务器上执行我的代码时,我得到了 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

你在一个紧密的循环中调用它,导致累积差异:

引用time.sleep(..) 文档

在给定的秒数内暂停执行调用线程。该参数可以是一个浮点数,以指示更精确的睡眠时间。实际的挂起时间可能少于请求的时间,因为任何捕获的信号都会在执行该信号的捕获例程后终止 sleep()。此外,由于系统中其他活动的调度,暂停时间可能比请求的时间长任意量。

在 3.5 版更改:即使睡眠被信号中断,该函数现在至少睡眠 sec,除非信号处理程序引发异常(有关基本原理,请参见 PEP 475)。

强调我的。


查看完整回答
反对 回复 2022-06-02
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

由于系统的调度,在每次循环迭代中执行代码不会花费相同的时间(系统会暂停您的进程以执行另一个进程然后返回它......)。



查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 315 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号