最近我一直在構建一個錯誤日誌記錄應用程序,並且正在準確地對傳入數據進行時間戳記。當我準確地表達時,我的意思是每個時間戳應該相對於彼此準確(不需要同步到原子鐘或類似的東西)。Python日誌記錄中的準確時間戳
我一直在使用datetime.now()作爲第一個嘗試,但這並不完美:
>>> for i in range(0,1000):
... datetime.datetime.now()
...
datetime.datetime(2008, 10, 1, 13, 17, 27, 562000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 562000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 562000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 562000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 578000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 578000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 578000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 578000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 578000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 609000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 609000)
datetime.datetime(2008, 10, 1, 13, 17, 27, 609000)
etc.
的時鐘採樣的第一第二之間的變化是這樣的:
uSecs difference
562000
578000 16000
609000 31000
625000 16000
640000 15000
656000 16000
687000 31000
703000 16000
718000 15000
750000 32000
765000 15000
781000 16000
796000 15000
828000 32000
843000 15000
859000 16000
890000 31000
906000 16000
921000 15000
937000 16000
968000 31000
984000 16000
因此,看起來計時器數據只在我的機器上每15〜32ms更新一次。當我們分析數據時,問題出現了,因爲按照時間戳以外的方式排序,然後再按時間戳排序可能會使數據按錯誤順序排序(按時間順序排列)。如果時間標記精確到對時間標記發生器的任何調用都給出唯一時間標記,那將是很好的做法。
我一直在考慮一些涉及到使用time.clock()調用添加到開始日期時間的方法,但希望能夠在同一臺機器上的線程間準確工作的解決方案。任何建議將非常感激地收到。
我剛剛在* Windows *中發佈了一個新答案,使用Python,您可以使用Windows QPC時鐘獲得亞微秒級* *分辨率*(不準確性)時間戳,正如我在代碼中鏈接的代碼回答。 – 2016-08-09 02:01:58
爲什麼你要建立自己的日誌框架?已經有很多了,時間戳是一個解決的問題(降低到一定的準確度)。萬一你有一個沒有現有日誌框架解決的用例,你能選擇最接近的用戶並提出問題並提交你的代碼嗎? – smci 2017-07-10 15:17:52
因爲〜8.5年前(當我發佈這個時),選項有些更有限。我沒有構建錯誤日誌框架,我正在寫一些東西來接收UDP數據並從中記錄信息。如果有一個可用的庫(並且我找到了)可以做到這一點,我已經完全開放使用它;-) – 2017-07-13 15:43:44