【发布时间】:2010-11-15 09:33:10
【问题描述】:
我想记录某件事在实时墙上的时间。目前我正在这样做:
startTime = time.time()
someSQLOrSomething()
print "That took %.3f seconds" % (time.time() - startTime)
但如果在 SQL 查询(或其他任何查询)运行时调整时间,这将失败(产生不正确的结果)。
我不想仅仅对其进行基准测试。我想将其记录在实时应用程序中,以便查看实时系统的趋势。
我想要类似 clock_gettime(CLOCK_MONOTONIC,...) 的东西,但在 Python 中。而且最好不必编写调用clock_gettime()的C模块。
【问题讨论】:
-
好吧,我真的不知道它实际调整的频率。我运行NTP。但是有了单调时钟,我就不必遇到诸如 Oracle RAC 错误之类的问题,如果时间向后设置,它会重新启动系统。除了小的 NTP 调整外,还有可以前后移动的闰秒。
-
S.Lott:不正确。 “闰秒是正或负的一秒调整 [...]”。抬头看是微不足道的。这是维基百科上“闰秒”文章的第一句话。因此,当添加闰秒时,NTP 将向后重新调整您的系统时间(因为您的系统速度很快。它没有计算 23:59:60),这意味着基于 time.time() 的测量可能是负数。相信我,由于我去年提到的错误,许多 Oracle 服务器重新启动。我只是以 Oracle 为例,有些程序无法处理时间调整。
-
我不知道为什么(未打补丁的)Oracle 10 会这样做。确实如此,甲骨文(该公司)证实了这一点。
-
只是想在这里添加一个我们遇到的用例的评论。在我们由多个 vmware 系统组成的设置中,我们注意到来宾 vm 中确实经常发生时间“调整”,尤其是在主机的平均负载情况下。高。这会导致
supervisord之类的东西似乎依赖于 time.time() 崩溃,从而导致它启动的进程孤立。我们已通过应用补丁 ^ 修复 ^ 这个问题 - github.com/Supervisor/supervisor/pull/468 -
@Thomas:理论上,可能会有负闰秒。实际上,所有闰秒都是正数。见The leap second: its history and possible future。
标签: python linux benchmarking clock