python - 有没有办法对多次执行的代码块进行计时?
问题描述
给定一个函数,如:
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,但是这个包括网络延迟、线程休眠等……</p>
在您的情况下,我会使用“tottime”并查看 do_1 花了多少时间。
推荐阅读
- c# - 在 IIS 上上传文件时 ASP.NET Core API 500 内部服务器错误
- database - 如何在python中的不同线程上共享数据库
- ios - 如何使用图像发送通知 - react-native-firebase
- php - 如何为任何字符和空格制作正则表达式
- php - 如何修复godaddy服务器上codeigniter网站的“错误连接超时错误”?
- php - 仅在用户登录时打开页面/帖子/产品 - WordPress
- javascript - 改进 javascript 动画以使其流畅和优化
- blockchain - 集成区块链支付网关
- twitter - Twitter 搜索所有以...结尾的词(语料库语言学)
- sql - 如何选择连接?右或左