使用DataJoint时如何分析Python代码性能?获取.populate()调用详细分析报告
解决.populate()性能分析无详细结果的方法
给.populate()内部函数手动加性能追踪
如果.populate()是你自己实现的函数,直接在它内部调用的所有子函数上加上@profile装饰器,再重新运行Jupyter里的%lprun -f populate your_code_that_calls_populate()。要是调用的是第三方库的.populate(),可以用猴子补丁临时给它内部的关键子函数加装饰器,比如:from some_library import TargetClass # 先保存原函数 original_sub_func = TargetClass._internal_sub_function # 加装饰器 @profile def profiled_sub_func(*args, **kwargs): return original_sub_func(*args, **kwargs) # 替换原函数 TargetClass._internal_sub_function = profiled_sub_func之后再运行.populate(),line_profiler就会显示子函数的耗时。
用%prun做全局调用分析
在Jupyter里直接运行%prun -s cumulative your_object.populate(),这个命令会按累积耗时排序所有被调用的函数,能直接看到.populate()内部各个子步骤的时间占比,不需要额外装饰器,适合快速定位瓶颈。用kernprof命令行深度追踪
把调用.populate()的代码写成单独的.py脚本,然后在终端运行:kernprof -l -v your_script.py要是第三方库的函数,在脚本里提前给目标子函数加
@profile装饰器,这样输出的报告会包含所有被追踪函数的逐行耗时。
内容的提问来源于stack exchange,提问作者Loren Frank
相关产品推荐
相关产品推荐

