【问题标题】:Discrepancy between time and datetime modules for measuring code runtime用于测量代码运行时的时间和日期时间模块之间的差异
【发布时间】:2019-02-01 00:22:33
【问题描述】:

我正在使用时间模块测量函数的响应时间。时间模块应该将秒输出为浮点数,因此我保存了开始时间值 (time.clock()) 并在最后读取另一个读数,并将差值用作运行时。在查看结果时,我们注意到运行时间似乎很高——例如,似乎需要不到 2 秒的时间,打印为 3-and-change。基于感知到的问题,我决定使用 datetime 模块仔细检查结果。并排打印两个显示时间模块值几乎是日期时间值的两倍。

有人知道为什么会这样吗?

这是我的代码:

for datum in data:
    start = datetime.datetime.now()
    startts = time.clock()
    check = test_func(datum)
    runtime = datetime.datetime.now() - start
    runts = time.clock() - startts
    print(check, "Time required:", runtime, "or", runts)

我的一些结果:

XYZ Time required: 0:00:01.985303 or 3.7836029999999994
XYZ Time required: 0:00:01.476289 or 3.3465039999999817
XYZ Time required: 0:00:01.454407 or 3.7140109999999993
XYZ Time required: 0:00:01.550416 or 3.860824000000008

我假设以前会注意到这类问题,但我只是在我的实现中遗漏了一些基本的东西。有人能帮我介绍一下吗?

【问题讨论】:

    标签: python datetime duration


    【解决方案1】:

    似乎 time.clock() 自 3.3 版以来已被弃用

    也许this 会有所帮助?

    time.clock() 在 Unix 上,将当前处理器时间作为浮点数返回 以秒表示。精度,实际上就是定义 “处理器时间”的含义,取决于 C 函数的含义 同名。

    在 Windows 上,此函数返回自挂钟以来经过的秒数 首先调用这个函数,作为一个浮点数,基于 Win32 函数 QueryPerformanceCounter()。分辨率通常为 优于一微秒。

    3.3 版后已弃用:此函数的行为取决于 在平台上:使用 perf_counter() 或 process_time() 代替, 根据您的要求,有一个明确定义的行为。

    【讨论】:

    • 是的,但这并不能解释差异的来源。
    【解决方案2】:

    我们发现了问题。我正在测试的 test_func 正在使用多线程进程。我俩都不知道,也不知道这是个问题。

    时间模块使用处理器时间 (https://docs.python.org/3.6/library/time.html),而日期时间模块使用挂钟时间 (https://docs.python.org/3.6/library/datetime.html)。使用日期时间时间戳的差异告诉我实际已经过去了多少时间,而对于我们的目的来说,就是相关信息。

    我希望这对将来的其他人有所帮助!

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 2021-10-19
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多