我想测量代码段的运行时间。我需要这是确定性的,这样无论后台发生什么,我每次都能得到相同的持续时间(秒/毫秒等(。所以我想在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