亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 348 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號