web-dev-qa-db-ja.com

Unixタイムスタンプの増分ですか?

センサーからデータを収集する単純なPythonプログラムがあります。プログラムは、データをシステムのタイムスタンプと一緒にREST=を介してリモートサーバーに送信します。 POSTリクエスト。

POSTリクエストが失敗した場合、データはタイムスタンプとともにCSVファイルに保存されます。インターネット接続が再び利用可能になると、CSVファイルのデータがリモートサーバーに送信されます。

リモートサーバーには、収集したデータからグラフを生成する単純なPHPアプリがあります。

私の質問:Unixタイムスタンプは増分で一意ですか?タイムスタンプを昇順で並べ替えて、収集されたデータのシーケンスを確認しても安全ですか?

2
NAT3863

タイムスタンプが増分であるという保証はありません。システム時刻を取得する通常の方法は gettimeofday であり、これはまったく保証を提供しません。

実際には、gettimeofdayは、システム管理者または構成エラーによってシステムクロックが変更されない限り、単調になります。 gettimeofdayの解像度はせいぜいマイクロ秒です。これは、1µs以上離れているgettimeofdayへの2回の呼び出しの間に値が更新されることを保証するものではありませんが、呼び出しの間隔が長いほど、値が変更された可能性が高くなります。

一部のシステムは単調な時計をサポートしており、 clock_gettime クロックID CLOCK_MONOTONIC。 Pythonは time.CLOCK_MONOTONIC バージョン3.3以降。このクロックは再起動間で単調であり、両方のプロパティの可能性が高いですが、連続する呼び出しが異なる値を返すという保証はありません。

一部のフィールドが増分であることを絶対的に保証したい場合は、別のフィールドにカウンターを維持してください。