我對上述函數的結果的精確度感到非常困惑。
爲了我的文檔不清晰可言,比如這裏有兩句話:Python2/3中的time.clock()和time.time()分辨率
從time
模塊文檔
的各種實時功能的精確度可能低於建議表達其價值或論點的單位。 E.g.在大多數Unix系統中,時鐘「滴答」只有每秒50或100次。
從timeit
模塊文檔
定義缺省計時器,在一個特定平臺的方式。在Windows上,time.clock()的粒度爲微秒,但time.time()的粒度爲1/60秒。 在Unix上,time.clock()具有1/100秒的粒度,time.time()更準確。在任一平臺上,default_timer()都會測量掛鐘時間,而不是CPU時間。這意味着在同一臺計算機上運行的其他進程可能會影響計時。
現在因爲實時,在Unix中,它返回了time.time()
,它的分辨率遠遠高於1/100,它怎麼能每秒鐘「嘀」50或100次呢?
總是關於分辨率,我不明白什麼精確的分辨率,我得到調用各項功能,所以我嘗試了以下,我把我的猜測在評論:
>>> time.clock()
0.038955 # a resolution of microsecond?
>>> time.time()
1410633457.0955694 # a resolution of 10-7 second?
>>> time.perf_counter()
4548.103329075 # a resolution of 10-9 second (i.e nanosecond)?
附:這是在Python3.4.0上嘗試的,在Python2中爲time.clock()
和time.time()
我總是得到6個數字,所以1us精度?
我不明白,這樣的文件是錯誤的?如果'time.pref_counter()'在點後面返回9個數字,意味着它已經達到了納秒級的分辨率,因爲如果不是這樣,爲什麼要返回9個數字而不是5或6? – zer0uno 2014-09-13 19:02:15
@antox:不,它意味着你誤解了精確度*的含義。浮點僅僅是秒的一小部分,但浮點值幾乎總是不精確的(它是二進制分數的總和,1/2 + 1/4 + 1/8等,*近似*值)。 – 2014-09-13 19:05:04
另外[**處理器時間**和**掛鐘時間之間的差異**](http://pymotw.com/2/time/#processor-clock-time)是相關的 - 基本上處理器時鐘是隻有在你的流程正在工作時纔會推進。所以每次它蜱時,它的值可能有一定的* precision *,但它的*精度*也取決於CPU負載。 – 2014-09-13 19:06:31