如何通过cProfile获取墙钟时间?tottime是否为墙钟时间?
用cProfile获取墙钟时间的正确姿势
先明确:cProfile默认不用墙钟时间
cProfile默认统计的是进程CPU时间——也就是程序实际占用CPU干活的时间,像等待IO、休眠这些CPU不工作的时间是不算的。墙钟时间是真实世界的流逝时间,和这个完全不是一回事。
tottime这类数值默认不是墙钟时间
别搞混了:
tottime:是函数自身执行消耗的CPU时间(不含调用子函数的时间)cumtime:是函数加所有子函数总共消耗的CPU时间
只有你切换到墙钟时间计时后,这些数值才会对应墙钟时间的统计结果。
命令行下切换到墙钟时间的两种方法
你用的是python3 -m cProfile,直接用下面两种方法就行:
方法1:临时设置环境变量
运行命令时加个环境变量指定计时器为time.time(Python自带的墙钟时间函数):
PYTHONPROFILETIMER=time.time python3 -m cProfile your_script.py
方法2:写个简单的包装脚本(适合频繁用的情况)
要是不想每次都敲环境变量,写个小脚本profile_wall.py:
import cProfile import sys import time # 强制用墙钟时间计时 cProfile.run('exec(open(sys.argv[1]).read())', timer=time.time)
然后运行你的脚本:
python3 profile_wall.py your_script.py
怎么确认生效了?
找个带time.sleep(1)的测试脚本试试:默认情况下,cProfile统计的总时间不会包含这1秒的休眠时间;切换到墙钟时间后,总时间会多出来这1秒,一眼就能看出来。
内容的提问来源于stack exchange,提问作者joel
相关产品推荐
相关产品推荐

