如何在 python 中获取单调时间持续时间?
- 2024-10-22 08:28:00
- admin 原创
- 75
问题描述:
我想记录某件事在实际挂钟时间内花费的时间。目前我正在这样做:
startTime = time.time()
someSQLOrSomething()
print "That took %.3f seconds" % (time.time() - startTime)
但是,如果在 SQL 查询(或其他任何查询)运行时调整时间,则将会失败(产生不正确的结果)。
我不想只是对其进行基准测试。我想将其记录到实时应用程序中,以便查看实时系统的趋势。
我想要类似clock_gettime(CLOCK_MONOTONIC,...)的东西,但用Python实现。最好不用写一个调用clock_gettime()的C模块。
解决方案 1:
该函数非常简单,您可以使用 ctypes 来访问它:
#!/usr/bin/env python
__all__ = ["monotonic_time"]
import ctypes, os
CLOCK_MONOTONIC_RAW = 4 # see <linux/time.h>
class timespec(ctypes.Structure):
_fields_ = [
('tv_sec', ctypes.c_long),
('tv_nsec', ctypes.c_long)
]
librt = ctypes.CDLL('librt.so.1', use_errno=True)
clock_gettime = librt.clock_gettime
clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)]
def monotonic_time():
t = timespec()
if clock_gettime(CLOCK_MONOTONIC_RAW , ctypes.pointer(t)) != 0:
errno_ = ctypes.get_errno()
raise OSError(errno_, os.strerror(errno_))
return t.tv_sec + t.tv_nsec * 1e-9
if __name__ == "__main__":
print monotonic_time()
解决方案 2:
在 Python 3.3+ 中有time.monotonic(另请参阅PEP 418)。
解决方案 3:
正如这个问题所指出的,避免在 Linux 上重新调整 NTP 需要 CLOCK_MONOTONIC_RAW。在 Linux 上,该值定义为 4(自 2.6.28 起)。
从 Python 中可移植地获取 C 头文件中正确的常量 #defined 是比较棘手的;有 h2py,但它并不能真正帮助您在运行时获取值。
解决方案 4:
以下是我在 Python 2.7 中获得单调时间的方法:
安装monotonic
包:
pip install monotonic
然后在 Python 中:
import monotonic; mtime = monotonic.time.time #now mtime() can be used in place of time.time()
t0 = mtime()
#...do something
elapsed = mtime()-t0 #gives correct elapsed time, even if system clock changed.
编辑:在信任之前,请检查上述内容是否适用于您的目标操作系统。单调库似乎可以处理某些操作系统中的时钟变化,而其他操作系统中则不能。
解决方案 5:
time.monotonic()
可能会有用:
返回单调时钟(即不能倒退的时钟)的值(以秒的小数部分表示)。该时钟不受系统时钟更新的影响。返回值的参考点未定义,因此只有连续调用结果之间的差异才有效。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD