最近我一直在构建一个错误日志记录应用程序,并且正在准确地对传入数据进行时间戳记。当我准确地表达时,我的意思是每个时间戳应该相对于彼此准确(不需要同步到原子钟或类似的东西)。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