我最近一直在构建一个错误记录应用程序,并且正在寻找一种准确地为传入数据加上时间戳的方法。当我准确地说时,我的意思是每个时间戳都应该相对于彼此准确(无需同步到原子钟或类似的东西)。
我一直在使用 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() 调用的方法,但希望有一种解决方案可以在同一台机器上的线程间准确工作。任何建议将不胜感激。