Python CPU时钟.time.cclock()与time.perf_counter()与time.process_



我想测量代码段的运行时间。我需要这是确定性的,这样无论后台发生什么,我每次都能得到相同的持续时间(秒/毫秒等(。所以我想在unix上使用time.clock((来测量CPU时间。

time.clock((已被减少,建议切换到perf_counter或process_time。我在看python文档时发现了以下内容。

time.perf_counter((→float返回值(以秒为单位(性能计数器,即可用的最高时钟测量短持续时间的分辨率。它确实包括经过的时间在睡眠期间,并且是全系统的。返回的的参考点值未定义,因此只有连续调用是有效的。

time.process_time((→float返回值(以秒为单位(当前进程的系统和用户CPU时间之和。它不包括睡眠期间经过的时间。通过释义返回值的引用点未定义,因此只有连续调用的结果之间的差异有效的

由于我在代码中没有使用任何形式的睡眠,主要区别似乎是"进程范围"one_answers"系统范围"。有时间可以详细说明一下区别吗?

第二,这样做正确吗?

perf_counter和timeit都会给您测试的代码块执行所需的时间。

time.prrocess_time((,它不计算CPU占用的时间,这不一定与函数或代码块相同。

我在Github上发现了这个线程,这个问题似乎很高级,可能会完全不同,这取决于要进行基准测试的操作系统或程序。

time.process_time((不计算的是父多线程:

"使用time.prrocess_time的一个结果是不包括在基准测试的子进程中花费的时间。多线程基准测试还返回计算所有CPU的总CPU时间">

性能计数器

from time import perf_counter

start = perf_counter()
for _ in range(10000):
x = "-".join(str(n) for n in range(100))
end = perf_counter()
print('Perf Counter= ', end-start)
# Perf Counter=  0.23170840000000004

计时

import timeit
print(timeit.timeit('"-".join(str(n) for n in range(100))', number=10000))
# 0.20687929999999993

最新更新