【问题标题】:Time variable in script became negative during execution脚本中的时间变量在执行期间变为负数
【发布时间】:2021-10-19 09:55:25
【问题描述】:

我有一个 Python 程序在我的 Raspberry Pi 3B 上运行,进行大量图像处理等等。我想通过将程序写入 .csv 文件来从程序中收集一些数据测量值,并且我想为每个测量值写入相应的时间。我使用time.clock()(参见下面的代码 sn-p)来查找每次写入操作之前的时间,但在 2147 秒和 2148 秒之间,时间变为负数(参见下面的 sn-p 表)。我预计会发生某种溢出,但我无法理解它以何种方式溢出。 Raspberry Pi 是一个 32 位系统,据我了解,time.clock() 方法返回一个浮点数。时间变量不应该只在更大的值处溢出,还是在这种情况下时间变量不是 32 位?

从那时起,我已经阅读了各种线程,表明 time.time() 可能是这个用例的更好方法,我可能会在以后的测试中这样做,但我只是想看看我能用到目前为止我收集的值。我相信我可以对记录的时间进行一些处理以“消除溢出”,因为没有更好的词,并按原样使用它。有什么想法吗?

import time
import csv


def somefunction(someX, someY, csvwriter):
    t = time.clock()

    x = somefunc(someX)
    y = somefunc(someY)

    csvwriter.writerow([t, x, y])

    return
Time (s) X value Y value
2146.978524 -0.0019 0.00032
2147.30423 -0.00191 0.00023
-2147.336675 -0.00182 0.00034
-2147.000555 -0.00164 0.00037

【问题讨论】:

  • time.clock() 模块中不再有 time.clock() 函数。你在使用 Python 2 吗?如果是这样,您应该适当地标记您的问题。
  • @martineau 我正在使用 Python 3.7。我不知道该告诉你什么,但我使用了 time.clock()。
  • Python 3.7 仍然有time.clock,它是removed in 3.8
  • 在此之前,time.clock() 自 3.3 版起已被弃用。我在您的问题中添加了“python-3.7”标签。同时,如果您改用time.perf_counter()time.process_time(),问题可能会消失(如链接的“新增内容”文档中所建议的那样)。我也怀疑这是一个 32 位问题,因为在文档的开头它说“此模块中的函数可能无法处理纪元之前或未来很远的日期和时间。未来的截止点是由 C 库决定;对于 32 位系统,通常是 2038 年。”
  • @martineau “未来的截止点由 C 库决定;对于 32 位系统,通常在 2038 年。”谢谢,这提供了我需要的所有信息。如果您将其作为答案,我想将其标记为这样。

标签: python raspberry-pi floating-point python-3.7


【解决方案1】:

我怀疑这是 32 位问题。 time 模块的 Python 3.7 documentation 开头附近的第三个要点说:

  • 此模块中的函数可能无法处理纪元之前或将来的日期和时间。未来的分界点由C库决定;对于 32 位系统,通常是 2038 年。

也就是说,我真的不知道问题出在哪里。也许使用time.perf_counter()time.process_time() 函数可以避免这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多