【问题标题】:why same python code has different clock time?为什么相同的python代码有不同的时钟时间?
【发布时间】:2019-01-31 17:38:20
【问题描述】:

我正在使用以下 python 代码对我的服务器进行基准测试:

import time
initial_clock = time.clock()
res = 0
for i in range(1, 10000000):
    res += i * i
print (time.clock() - initial_clock)

当我多次运行它时,我会得到不同的执行时间,从 2.163377 秒到 2.970836 秒。 我知道由于 CPU 负载的变化,相同的代码可能具有不同的执行时间,但正如 time.clock 文档中所说,它只考虑当前进程时钟,因此即使使用 @987654327 不同,它也应该使用 time.clock() 具有相同的执行时间@。不应该吗?

还有没有我可以得到一段python代码的准确clock计数?

编辑:我使用 time.process_time() 并得到相同的结果。

【问题讨论】:

  • 尝试使用timeit 而不是time,因为这样更准确。详情请查看this answer

标签: python cpu-usage clock


【解决方案1】:

计时码第一条规则:使用timeit module。这会自动为您的操作系统选择最佳计时器,最大限度地减少其他影响,并进行多次计时,以便为您提供最准确的时间估计。

接下来,time.clock()不是特定于进程的。这是 CPU 上的时钟时间,是的,但不是当前进程使用 CPU 所花费的时间。计划在 CPU 上运行的其他进程会增加所用时间的波动。您应该改用time.process_time()

但是,所有代码都受到潜在的缓存和特定于 Python 的周期性进程的影响,例如 garbage collector 运行。您不能期望得到可重复的 time.clock()time.process_time() 值,因为该时钟无法解释 Python 进程本身中的此类后台工作。您可以在计时代码时禁用垃圾收集器进程(timeit 为您执行此操作),但这对内部缓存没有帮助(特定于实现且大多数未记录)。

timeit 使用time.perf_counter() 包括花费在 I/O 和其他可能由被测代码启动的进程上的时间。你可以告诉它使用time.process_time(),而不是在使用timeit作为命令行脚本时使用-p开关,或者在调用API函数时传递timer=time.process_time

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多