我有一个简单的 Python 程序,可以从传感器收集数据。然后,程序将通过 REST POST 请求将数据与系统时间戳一起发送到远程服务器。
如果 POST 请求失败,数据连同时间戳将被保存到 CSV 文件中。一旦互联网连接再次可用,CSV 文件上的数据将被发送到远程服务器。
在远程服务器上,我有一个简单的 PHP 应用程序,它将根据收集的数据生成图表。
我的问题:Unix时间戳是递增的且唯一的吗?按升序对时间戳进行排序以查看收集的数据顺序是否安全?
答案1
不保证时间戳是增量的。获取系统时间的正常方法是gettimeofday
这根本不提供任何保证。
实际上,gettimeofday
除非系统管理员或配置错误导致系统时钟发生变化,否则将是单调的。gettimeofday
最多具有微秒分辨率。如果两次调用之间的间隔gettimeofday
超过 1μs,这并不能保证该值会被更新,但调用之间的间隔越长,该值就越有可能发生更改。
有些系统支持单调时钟,通过调用读取clock_gettime
与时钟 id CLOCK_MONOTONIC
。 Python 通过以下方式提供对这个时间的访问time.CLOCK_MONOTONIC
从 3.3 版本开始。该时钟仅在重新启动之间是单调的,并且不能保证连续的调用返回不同的值,尽管这两个属性都很有可能。
如果您想要绝对保证某些字段是增量的,请在单独的字段中维护一个计数器。