time.time_ns() 在 macOS 上未正确返回纳秒?

2024-04-08

从 Python 3.7 开始,我们有了支持纳秒分辨率的新时间函数。但是,我不确定如何time.time_ns()应该可以工作。

看下面的例子:

>>> for n in range(10):
...     time.sleep(random.random())
...     print((time.time(), time.time_ns(), time.monotonic_ns()))
...
(1545306865.8667252, 1545306865866727000, 439497985080)
(1545306866.084973, 1545306866084974000, 439716229679)
(1545306866.2972622, 1545306866297264000, 439928562751)
(1545306866.635714, 1545306866635716000, 440267014751)
(1545306866.745001, 1545306866745003000, 440376301646)
(1545306867.212074, 1545306867212076000, 440843415181)
(1545306867.7111092, 1545306867711111000, 441342449470)
(1545306867.792372, 1545306867792374000, 441423713091)
(1545306867.821886, 1545306867821887000, 441453223973)
(1545306868.127483, 1545306868127485000, 441758824065)

如你看到的,time.time_ns()确实以纳秒精度的整数形式返回时间,但最后的数字始终是000。事实不应该是这样。这是一个错误还是我错过了什么?


这是关于精度的。 python 中的每个时钟都有相应的精度,这解释了您所经历的差异。让我们看看运行 MacOS Mojave 的 Macbook Pro 2018 的时钟详细信息。 Python3.7是通过brew安装的:

In [41]: time.perf_counter_ns()
Out[41]: 10464788941125

In [42]: time.process_time_ns()
Out[42]: 22502272000

In [43]: time.time_ns()
Out[43]: 1545312118561931000

In [44]: time.monotonic_ns()
Out[44]: 10477720411470

In [45]: time.get_clock_info('perf_counter')
Out[45]: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)

In [46]: time.get_clock_info('process_time')
Out[46]: namespace(adjustable=False, implementation='clock_gettime(CLOCK_PROCESS_CPUTIME_ID)', monotonic=True, resolution=1.0000000000000002e-06)

In [47]: time.get_clock_info('time')
Out[47]: namespace(adjustable=True, implementation='clock_gettime(CLOCK_REALTIME)', monotonic=False, resolution=1.0000000000000002e-06)

In [48]: time.get_clock_info('monotonic')
Out[48]: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)

请关注implementation and resolution。以下是相同的信息,但来自运行在 Ubuntu 服务器上的虚拟机:

>>> time.perf_counter_ns()
4094438601446186

>>> time.process_time_ns()
35344006

>>> time.time_ns()
1545312252720125938

>>> time.monotonic_ns()
4094449881239590

>>> time.get_clock_info('perf_counter')
namespace(adjustable=False, implementation='clock_gettime(CLOCK_MONOTONIC)', monotonic=True, resolution=1e-09)

>>> time.get_clock_info('time')
namespace(adjustable=True, implementation='clock_gettime(CLOCK_REALTIME)', monotonic=False, resolution=1e-09)

>>> time.get_clock_info('process_time')
namespace(adjustable=False, implementation='clock_gettime(CLOCK_PROCESS_CPUTIME_ID)', monotonic=True, resolution=1e-09)

>>> time.get_clock_info('monotonic')
namespace(adjustable=False, implementation='clock_gettime(CLOCK_MONOTONIC)', monotonic=True, resolution=1e-09)

正如您所看到的,每个时钟都有不同的实现和精度,具体取决于平台。在 MacOS 上,时钟精度为process_time and time时钟设置为1e-06这是微秒。这就解释了其中的差异。

您还可以使用time.clock_getres获得精度:

In [51]: time.clock_getres(time.CLOCK_REALTIME)
Out[51]: 1.0000000000000002e-06

进一步阅读:

  • https://www.webucator.com/blog/2015/08/python-clocks-explained/ https://www.webucator.com/blog/2015/08/python-clocks-explained/
  • 了解clock_gettime()的不同时钟 https://stackoverflow.com/questions/7506952/understanding-the-different-clocks-of-clock-gettime
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

time.time_ns() 在 macOS 上未正确返回纳秒? 的相关文章

随机推荐

  • 计算持续时间

    我有一个小的android问题 我需要一个计时器来计算从特定活动打开到单击该活动中的某个按钮的持续时间 即活动打开的时间 在谷歌搜索时 我发现了 TimerTask 但这似乎只在一定的时间间隔内运行一个线程 从我的 Android 经验来看
  • 带两个参数的 Matplotlib 颜色图

    我试图代表两个变量x and y在地图上使用颜色 到目前为止 我能达到的最好效果是对一个变量使用颜色 对另一个变量使用透明度 plt Polygon shape points fill False color cmap y alpha x
  • 缺少 CrudRepository#findOne 方法

    我在我的项目中使用 Spring 5 直到今天还有可用的方法CrudRepository findOne https docs spring io spring data commons docs current api org sprin
  • scala集合循环缓冲区

    只是在这里用循环缓冲区搞乱 这是一个明智的实现 还是有更快 更可靠的方法来给这只猫剥皮 class CircularBuffer T size Int implicit mf Manifest T private val arr new s
  • 一个得到良好支持的 C++ 联合替代方案?

    我认为联合对于我的想法来说是完美的 特别是当我认为我的代码应该在真正异构的机器系列上运行时 特别是低功率机器上 让我烦恼的是创建编译器的人例如 似乎不太关心引入和提供良好的工会支持这张桌子 http wiki apache org stdc
  • 在编辑文本中输入内容时,列表视图上的过滤器会消失列表项

    我遇到了一个奇怪的问题 实际上 我有一个自定义列表视图 在其中使用过滤器 一切正常 但是当我输入文本进行编辑文本时 它会消失所有列表项 我很奇怪为什么这种情况会发生在我身上 但我仍然不是 Android 的冠军 所以需要一些帮助 我在 st
  • 有没有比使用箭头键更快的替代方法?

    我经常使用 R 进行编码 我刚刚意识到将手向下移动到箭头键 然后再回到键盘上的字母是多么痛苦 在 Rstudio 中 我必须定期执行此操作 因为工作室会自动完成某些语法 例如括号和引号 然后我必须按箭头键移出括号 或引号 然后删除任何可能的
  • 如何使用 logit 函数编写 JAGS 二项式模型文件

    我正在做一项作业 使用 JAGS 对二项式分布进行建模p参数是另一个变量的函数d 这就是我正在尝试做的 为两个参数 alpha beta 从后验生成 10000 个样本 当 dist 25 进行 100 次尝试时 根据后验预测成功次数生成样
  • 如何使滑块离散?

    如何在 Flutter 中使滑块离散如上图所示 滑块离散 https i stack imgur com e2gp6 png Use the divisions的财产Slider https docs flutter io flutter
  • 使用curl和php发送POST数据

    Greets 因此 我在 Amazon EC2 上运行 Fedora Core 8 我安装了 httpd php5 和 libcurl 以及一堆其他东西 似乎工作得很好 但后来我意识到 POST 数据不是由我的 php 脚本中的curl 发
  • get_data_yahoo(pandas_datareader) 中 1m 间隔的问题

    I wrote from pandas datareader import data as pdr import yfinance as yf data pdr get data yahoo AAPL start 2020 04 12 en
  • (111)连接被拒绝 - Apache 反向代理和 Tomcat 8.5.51 - Docker Compose

    这适用于 Tomcat8 5 50 但是 使用 Tomcat8 5 51 Apache 无法通过 AJP 连接 出现以下错误 Tue Mar 10 20 15 31 378937 2020 proxy error pid 42 tid 13
  • 使用 Solver、EXCEL 时保存目标函数值

    我在 Excel 中设置了一个优化问题 当我优化 使用 GUI 时 我得到目标函数的最终 最佳 值 我可以看到 Excel 计算了很多点的目标函数值并确定了最佳点 有没有办法将所有目标函数值保存到 Excel 工作表中的某个范围 如果我可以
  • 我可以限制通过 JavaScript API 放入 S3 的对象的大小吗?

    可以使用 JavaScript API 将对象上传到 S3 并且可以使用 IAM 策略进行细粒度授权 例如 请参阅此政策 Version 2012 10 17 Statement Action s3 PutObject s3 PutObje
  • 当下游正在运行时阻止上游詹金斯作业

    我知道构建阻止程序插件 但似乎不起作用 运行詹金斯 1 609 作业 A 触发作业 B 我将作业 A 配置为在作业 B 正在运行时阻止 如果您触发 A 并且在 A 运行时再次触发 A 一旦第一个 A 完成 它就会触发 B 然后您就会同时运行
  • 仅允许特定 IP 地址访问 JSP 文件/文件夹

    我使用 JSP 和 servlet 制作了一个 CMS 应用程序 我没有使用任何类型的框架 CMS 有 2 个部分 前端 管理员 后端 如果我把它托管在www example com 例如 那么我的所有前端站点都会向所有用户显示 But w
  • 从具有相同列的两个表中选择数据

    我有两个具有相同结构的表 一种包含永久数据 另一种是清除并定期重置的 我需要对两个表使用相同的 select 语句 就好像它们只是一张表一样 这是我尝试过的 选择 从a b哪里 1 Where a and b具有相同的结构 您可能正在考虑在
  • HtmlAgilityPack 可以处理 xsl 文件附带的 xml 文件来渲染 html 吗?

    我想知道 HtmlAgilityPack 读取包含 xsl 文件的 xml 文件以呈现 html 的最佳方式 HtmlDocument 类上是否有任何设置可以帮助实现此目的 或者我是否必须找到一种方法来执行转换 然后再使用 HtmlAgil
  • 如何删除或排除 Ansible 模板列表中的项目?

    我正在编写一个 Ansible 模板 需要生成主机组中的 IP 列表 排除当前主机IP 我在网上和文档中进行了搜索 但找不到任何允许您删除列表中项目的过滤器 我在下面创建了 hacky for循环来执行此操作 但想知道是否有人知道这样的过滤
  • time.time_ns() 在 macOS 上未正确返回纳秒?

    从 Python 3 7 开始 我们有了支持纳秒分辨率的新时间函数 但是 我不确定如何time time ns 应该可以工作 看下面的例子 gt gt gt for n in range 10 time sleep random rando