当前位置: 首页 > 面试题库 >

在Python中测量经过时间

严曜文
2023-03-14
问题内容

有没有一种简单的方法/模块可以 正确
测量python中的经过时间?我知道我可以简单地打电话time.time()两次并取差额,但是如果更改系统时间,那将产生错误的结果。当然,这种情况很少发生,但这确实表明我在衡量错误的事情。

考虑time.time()到持续时间时,使用它来衡量是难以置信的。您将两个绝对时间测量值的差值反过来由持续时间测量值(由计时器执行)和已知的绝对时间(手动设置或通过ntp设置)构成,而您根本不感兴趣。

因此,有没有一种方法可以直接查询此“计时器时间”?我以为它可以表示为没有有意义的绝对表示的毫秒或微秒值(因此不需要随系统时间进行调整)。环顾四周,似乎这System.nanoTime()确实是Java的功能,但是我没有找到相应的Python函数,即使它(从硬件技术上)比提供起来更容易time.time()

编辑:为避免混淆并解决以下问题的答案:这与DST更改无关,并且我也不需要CPU时间-
我希望经过的物理时间。它不需要非常细粒度,甚至不需要特别准确。它只是不应该给我负面的持续时间,或者不给我持续数个数量级(超过粒度)的持续时间,只是因为有人决定将系统时钟设置为其他值。这是Python文档对“
time.time()”的评价:

“虽然此函数通常返回非递减值,但是如果两次调用之间的系统时钟已被调回,则它可以返回比前一个调用更低的值。”

我正是要避免这种情况,因为它可能导致时间计算中出现诸如负值之类的奇怪现象。目前,我可以解决此问题,但我相信,在可行的情况下,学习使用适当的解决方案是一个好主意,因为有一天纠缠会再次困扰您。

Edit2:一些研究表明,您可以使用GetTickCount64()在Windows中获得与我希望的系统时间无关的度量,而在Linux下,您可以在times()的返回值中获得它。但是,我仍然找不到在Python中提供此功能的模块。


问题答案:

您似乎正在寻找的是单调计时器。一个单调的时间参考不跳或倒退。

已经有很多尝试基于其操作系统参考为Python实现跨平台单时钟。(在Windows,POSIX和BSD有很大的不同)看到的讨论和一些尝试在单调时该SO职位。

通常,您可以只使用os.times():

os.times()

返回一个五元组的浮点数,以秒为单位指示累计(处理器或其他)时间。这些项目是:用户时间,系统时间,儿童的用户时间,儿童的系统时间以及从过去的固定点开始按此顺序经过的实时时间。请参阅Unix手册页面times(2)或相应的Windows
Platform API文档。在Windows上,仅前两个项目被填充,其他项目为零。

可用性:Unix,Windows

但这不能满足Windows所需的经过时间(第五个元组)。

如果需要Windows支持,请考虑ctypes并可以直接调用GetTickCount64(),如本食谱中所述。



 类似资料:
  • 问题内容: 我想要的是开始在代码中的某个地方开始计时,然后获取经过的时间,以衡量执行少量功能所花费的时间。我认为我使用的timeit模块错了,但是文档对我来说很混乱。 问题答案: 使用代替。前者会自动在你的平台和Python版本上提供最佳时钟:

  • 问题内容: 我们如何衡量在Swift中运行一个函数所花费的时间?我试图以这种方式显示经过的时间:“经过的时间为.05秒”。看到在Java中,我们可以使用System.nanoTime(),Swift中有可用的等效方法来实现这一点吗? 请看一下示例程序: 问题答案: 这是我编写的用于测量Swift中的Euler问题的Swift函数 从Swift 3开始,Grand Central Dispatch现

  • 问题内容: 我有一个10和20问题游戏。我需要计算用户完成游戏需要花费多少时间。 我用它来停止计数器: 现在我需要两件事: 一种如何计算经过时间并将其存储在变量中的方法 我需要最终值是两倍,例如最终得分是:15.49秒。 问题答案: 游戏开始时: 游戏结束时:

  • 问题内容: 我想要这样的东西: 同样重要的是,例如,如果startTime为23:00,endTime为1:00,则持续时间为2:00。 为了在Java中完成此操作,应使用哪些类型? 问题答案: 不幸的是,到目前为止发布的十个答案中没有一个是正确的。 如果要测量经过的时间,并且希望它是正确的,则必须使用。你不能使用,除非你不介意结果错误。 的目的是测量经过的时间,目的是测量挂钟时间。你不能将一个用

  • 问题内容: 使用python中的Time模块,可以测量经过的时间吗?如果是这样,我该怎么做? 我需要这样做,以便如果光标在小部件中已存在一定时间,则会发生事件。 问题答案: 您还可以编写简单的装饰器来简化各种功能的执行时间的度量: 用法: 您可以同时分析多个功能。然后要打印测量值,只需调用print_prof_data():

  • 问题内容: 我是Android编程的新手,所以请您为我的问题提供帮助。我正在尝试以秒/毫秒为单位测量MouseEvent.ACTION_DOWN和MouseEvent.ACTION_UP之间的时间。 我的问题实际上是因为seconds变量没有显示我想要的内容,我什至不知道它的测量结果是否正确,对于上面的示例,持续时间为16545(???!?!?) -3秒。我该怎么做才能在两个MotionEvent