有没有办法对执行多次的代码块计时?

给定一个函数,如:

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 花费了多少时间。


以上是有没有办法对执行多次的代码块计时?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>