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

准确测量python函数所需的时间

常俊侠
2023-03-14
问题内容

我需要测量程序某些部分所花费的时间(不是用于调试,而是作为输出中的功能)。准确性很重要,因为总时间将不到一秒钟。

当我遇到timeit时,我将使用time模块,该模块声称
避免了一些用于度量执行时间的常见陷阱
。不幸的是,它有一个糟糕的接口,需要一个字符串作为输入,然后才是eval的。
__

因此,我是否需要使用此模块来准确地测量时间,还是时间足够?它指的是什么陷阱?

谢谢


问题答案:

根据Python文档,它与不同操作系统中时间函数的准确性有关:

默认计时器功能取决于平台。在Windows上,time.clock()的粒度为微秒,但time.time()的粒度为1/60秒;在Unix上,time.clock()具有1/100秒的粒度,并且time.time()更精确。在这两个平台上,默认计时器功能都将测量挂钟时间,而不是CPU时间。这意味着在同一台计算机上运行的其他进程可能会干扰计时。在Unix上,可以使用time.clock()来测量CPU时间。

要直接从timeit.py代码中提取:

if sys.platform == "win32":
    # On Windows, the best timer is time.clock()
    default_timer = time.clock
else:
    # On most other platforms the best timer is time.time()
    default_timer = time.time

此外,它直接为您设置运行时代码。如果使用time,则必须自己做。这当然 可以节省您的时间

Timeit的设置:

def inner(_it, _timer):
    #Your setup code
    %(setup)s
    _t0 = _timer()
    for _i in _it:
        #The code you want to time
        %(stmt)s
    _t1 = _timer()
    return _t1 - _t0

Python 3:

从Python
3.3开始,您可以使用time.perf_counter()(系统范围内的计时)或time.process_time()(进程范围内的计时),仅使用以前的方式即可time.clock()

from time import process_time

t = process_time()
#do some stuff
elapsed_time = process_time() - t

新功能process_time将不包括睡眠时间。

Python 3.7+:

从Python
3.7开始,您还可以使用process_time_ns()与相似的方法process_time()但是返回的时间以纳秒为单位。



 类似资料:
  • 问题内容: 我需要获取执行时间(以毫秒为单位)。 我最初在2008年问这个问题。当时接受的答案是使用。new Date().getTime()但是,我们大家都可以同意,使用标准performance.now()API更合适。因此,我正在更改对此答案的公认答案。 问题答案: 使用 : NodeJs:需要导入performance类 使用:(非标准)(生活水平)

  • 问题内容: 我正在Windows上的python中进行编程,想准确地测量函数运行所花费的时间。我已经编写了一个函数“ time_it”,该函数需要另一个函数,然后运行它并返回运行时间。 我称其为1000次并取平均值。(最后的1000常数以毫秒为单位给出答案。) 该函数似乎可以正常工作,但是我有一种na不安的感觉,那就是我做错了什么,通过这种方式,我花的时间比函数运行时实际花费的时间更多。 有没有更

  • 问题内容: 我正在创建一个简单的命令行实用程序,并使用字典作为一种case语句,并将关键字链接到它们的适当功能。这些函数都有不同数量的参数,因此当前要检查用户是否输入了每个函数所需的正确参数,我将所需数量的参数放入了格式的字典case语句中。 当前的设置工作得很好,但是我只是出于自我改进的目的,想知道是否有一种方法可以确定函数中所需参数的数量,而我的google尝试迄今未返回任何价值,但是我知道a

  • 问题内容: 我想知道一个PHP for循环执行需要多少毫秒。 我知道通用算法的结构,但是不知道如何在PHP中实现它: 问题答案: 您可以使用此功能 —返回当前的Unix时间戳(以微秒为单位) 如果将设置为,则返回一个浮点数,它表示自Unix纪元以来精确到最接近的微秒的当前时间(以秒为单位)。 用法示例:

  • 问题内容: 我需要获取执行时间(以毫秒为单位)。 当时接受的答案是使用newDate()。getTime()。但是,我们现在都可以同意使用标准performance.now()API更合适。因此,我正在更改对此答案的公认答案。 问题答案: 使用 performance.now(): :需要导入类 使用 console.time: (非标准) (living standard) 注意 : 传递给和方

  • 卸载调用将函数的数据(参数)从主机传输到Intel MIC(Xeon Phi协处理器3120系列)是否需要预定义的时间? 具体地说,我对要在mic上执行的函数进行卸载调用(“#pragma offload target(mic)”)。该函数有15个参数(指针和变量),我已经确认了参数在MIC上的正确传递。然而,为了检查参数传递的时间,我简化了代码,因此它只包含一个简单的“printf()”函数。我