首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >time.get_clock_info().resolution的含义

time.get_clock_info().resolution的含义
EN

Stack Overflow用户
提问于 2018-07-18 01:24:19
回答 1查看 748关注 0票数 4

python time模块提供了五个时钟:timemonotonicperf_counterprocess_timethread_time (以及不推荐的clock)。文档很好地解释了这些钟的作用。

您可以通过time.get_clock_info(<clock_name>)函数获得有关这些时钟的系统相关信息。这尤其是返回这个时钟的resolution,据我理解,这是对该时钟的连续调用之间的最小差异,即不是零。为了测试这一点,我创建了以下代码:

代码语言:javascript
复制
import time

names = ['time', 'monotonic', 'perf_counter', 'process_time', 'thread_time']

for n in names:
    info = time.get_clock_info(n)
    f = getattr(time, n)
    print(n, info)
    l = []
    for _ in range(1000000):
        l.append(f())
    deltas = [l[i] - l[i - 1] for i in range(1, len(l)) if l[i] - l[i - 1] != 0]
    print(min(deltas, default=0))

此代码为我打印以下内容:

代码语言:javascript
复制
time 0.015625
0.00650477409362793
monotonic 0.015625
0.015000000013969839
perf_counter 3.77580764525532e-07
3.7699999988483057e-07
process_time 1e-07
0.015625
thread_time 1e-07
0.015625

这很令人惊讶,因为time的实际最小增量比承诺的小2.4倍,而实际最小的process_timethread_time增量都比承诺的大150.000倍。

为什么会这样呢?这是取决于实现和python不知道实际的分辨率吗?如果是这样,它为什么要假装知道呢?还是我误会了什么?

系统信息:

  • Windows 10 64位
  • Python3.7 64位
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-18 01:52:11

价值“比承诺的150.000倍”是完全好的。代码的执行需要一些时间。您承诺的是,这是最小的差异,您将可以注册,而不是两个连续的调用将得到这个值。而且,这是定时器中值的解析,而不是定时器本身。您可以有一个计时器,它以100 ns的增量计数,但实际上每1U就会增加10个。

另一种方法是:您可以按照日积月累窗口的"time“实现(它使用了GetSystemTimeAdjustment ),您必须深入了解这些描述,看看结果是什么。有趣的一点是,lpTimeIncrement显然只在设置了lpTimeAdjustmentDisabled时才重要--这是cpython不检查的。

perf_counter只是奇怪,不太可能是正确的。它从QueryPerformanceCounter获取值,但是在377 is中执行时间测量是非常不可能的。

为了更好地了解计时器的行为,您还可以对结果进行直方图绘制,而不是使用最小值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51392238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档