我需要測量我的代碼的某些部分所花費的時間。在強大的服務器上執行我的代碼時,我得到了 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
提交
取消