【问题标题】:My python code occasionally takes 15 milliseconds to execute an empty method我的 python 代码有时需要 15 毫秒才能执行一个空方法
【发布时间】:2019-08-23 20:26:38
【问题描述】:

我创建了一个简单的应用程序,但我意识到我的代码运行非常缓慢。这个应用程序包括一遍又一遍地调用相同的方法。我尝试调查该问题,结果发现多次调用相同的函数/方法导致 Python 有时需要 15 毫秒才能执行一个空函数(通过)。

我在 Lenovo ThinkPad i7 CPU 上运行 Windows 10 Home 64 位 函数/方法的代码越少,运行时间为 15 毫秒的机会就越小,但是,它永远不会消失。

代码如下:

import time

class Clock:

    def __init__(self):
        self.t = time.time()

    def restart(self):
        dt = time.time() - self.t
        t = time.time()
        return dt * 1000


def method():
    pass



for i in range(100000):
    c = Clock()

    dt = c.restart()
    if dt > 1.:
        print(str(i) + ' ' + str(dt))

我希望我永远不会打印出任何东西,但是平均结果如下所示:

6497 15.619516372680664

44412 15.622615814208984

63348 15.621185302734375

平均 100000 次中的 1-4 次从启动时钟到得到结果(这是一个空函数调用和一个简单的减法和变量赋值)经过的时间是 15.62.. 毫秒,这使得运行时间真的很慢。 有时经过的时间是 1 毫秒。

感谢您的帮助!

【问题讨论】:

  • 15.6 ms 是您的 Windows 系统上的计时器分辨率。
  • 编辑:对不起,忘记在时间测量之间调用该方法,但无论如何问题仍然存在。有和没有来电。
  • 但是“restart”不是空的:它调用time.time两次并进行乘法
  • 如果你只是在循环中重复运行time.time(),你会得到什么?你有没有得到 0 到 15.6 之间的任何东西?

标签: python


【解决方案1】:

在您的代码中,您两次调用time.time(),这将需要系统从操作系统检索时间。你可以在这里阅读 How does python's time.time() method work?

正如您所提到的,您使用的是 Windows,您最好使用 time.clock() 来代替,并且会推迟您阅读此链接,因为它们的解释工作要好得多。 https://www.pythoncentral.io/measure-time-in-python-time-time-vs-time-clock/

此外,该链接将垃圾收集考虑到了性能,并提供了在测试期间将其删除的能力。

希望它能回答你的问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    相关资源
    最近更新 更多