Python中process_time()计时结果始终为0.0,求解决方案
关于Python中process_time()的工作原理及计时为0的问题
一、process_time()的工作原理
process_time()是Python标准库time模块中的函数,它返回当前进程占用CPU的总时间,包含用户态执行时间和内核态执行时间,但不计算进程休眠、等待IO等非CPU工作的时间。- 返回值为浮点数,单位是秒,其精度依赖于操作系统的时钟粒度(多数系统是微秒级)。如果代码执行时间短于这个粒度,就会返回0.0。
二、你的计时结果为0.0的原因
你的斐波那契实现用了缓存(记忆化),计算range(1500)内的斐波那契数时,每个数值只会被计算一次,递归的开销几乎可以忽略,整个任务的CPU执行时间远低于process_time()的精度阈值,所以最终差值显示为0.0。
三、解决方法
1. 改用更高精度的计时器
使用time.perf_counter(),它是专门用于测量短时间间隔的高精度计时器,精度比process_time()更高,能捕捉到更短的执行时间:
from time import perf_counter t = perf_counter() def fibonacci_of(n): if n in cache: return cache[n] cache[n] = fibonacci_of(n - 1) + fibonacci_of(n - 2) return cache[n] cache = {0: 0, 1: 1} fib = [fibonacci_of(n) for n in range(1500)] print(fib[-1]) print(perf_counter() - t)
2. 增加计算负载
如果一定要用process_time(),可以通过重复计算来增加总CPU时间,比如把计算逻辑放在循环里执行多次:
from time import process_time t = process_time() def fibonacci_of(n): if n in cache: return cache[n] cache[n] = fibonacci_of(n - 1) + fibonacci_of(n - 2) return cache[n] # 重复计算1000次 for _ in range(1000): cache = {0: 0, 1: 1} fib = [fibonacci_of(n) for n in range(1500)] print(fib[-1]) print(process_time() - t)
3. 计算更大范围的数值
比如把range(1500)改成range(10000),这样计算量会显著增加,CPU时间足够被process_time()捕捉到。
内容的提问来源于stack exchange,提问作者Alexander Konukhov
相关产品推荐
相关产品推荐

