有没有办法对执行多次的代码块计时?
给定一个函数,如:
do_something_big():
do_1()
do_2()
do_3()
这很容易得到它需要运行任何时间do_something_big()或单个实例do_1()。但假设我有:
for _ in range(100000):
do_something_big()
有没有一种简单的方法来获得 100,000do_1需要多长时间?这并不难 - 您只需为每个人计时并更新一些全局状态以跟踪总时间。但是是否已经构建了一个实用程序来为我抽象它?
回答
我建议使用例如 cProfile。这个包将对代码中的每个函数进行计时,并以一种很好的格式输出:
import cProfile
pr = cProfile.Profile()
pr.enable()
run_your_program_here()
pr.disable()
pr.print_stats(sort='tottime')
最后一行中的 sort 参数将根据您给定的选项对输出进行排序。您可以在此处阅读更多相关信息:
ncalls – 函数/方法被调用的次数(如果递归调用相同的函数/方法,则 ncalls 有两个值,例如 120/20,其中第一个是真正的调用次数,而第二个是直接呼叫数)
tottime – 不包括其他函数/方法的时间的总时间(以秒为单位)
percall – 执行函数的平均时间(每次调用)
cumtime - 以秒为单位的总时间包括它调用的其他函数的时间
percall – 与之前的 percall 类似,但是这个包括网络延迟、线程睡眠等……
在您的情况下,我会使用 'tottime' 并查看 do_1 花费了多少时间。