私は最近、エラー ログ アプリを構築しており、受信データに正確にタイムスタンプを付ける方法を探していました。正確に言うと、各タイムスタンプは互いに相対的に正確である必要があります (原子時計などと同期する必要はありません)。
最初の刺し傷として 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.
サンプルの最初の 1 秒間のクロック間の変化は次のようになります。
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 ~ 32 ミリ秒ごとにしか更新されないようです。問題は、データを分析するときに発生します。これは、タイムスタンプ以外で並べ替えてから再度タイムスタンプで並べ替えると、データが間違った順序 (時系列) になる可能性があるためです。タイムスタンプジェネレーターへの呼び出しが一意のタイムスタンプを与えるポイントまで、タイムスタンプが正確であると便利です。
開始日時に追加された time.clock() 呼び出しを使用するいくつかの方法を検討していましたが、同じマシン上の複数のスレッドで正確に機能するソリューションがあれば幸いです。どんな提案でも非常に感謝しています。