为单个函数的剖析/计时/跟踪提供装饰器
项目描述
profilehooks
这是一个用于剖析函数的装饰器集合。例如,要剖析单个函数
from profilehooks import profile @profile def my_function(args, etc): pass
当程序退出时将打印结果(或者您可以使用 @profile(immediate=True))。
如果您对粗略的计时感兴趣,又不想支付剖析的开销,请使用
from profilehooks import timecall @timecall # or @timecall(immediate=True) def my_function(args, etc): pass
最后,您可能对查看单个函数的行覆盖率感兴趣
from profilehooks import coverage @coverage def my_function(args, etc): pass
此外,如果使用 -m arg 运行,函数也可以在Python控制台或模块中使用
$ python -m profilehooks >>> profile <function profile at 0x1005c6488> $ python -m profilehooks yourmodule
安装后,通过 pydoc profilehooks 可以查看完整文档。
此模块的主页为 https://mg.pov.lt/profilehooks。它有截图,嗯,也就是更多的例子。
变更日志
1.12.0 (2020-08-20)
增加了将文本模式文件对象传递给 @profile() 装饰器和 FuncProfiler() 构造函数的 stdout kwarg 的能力,以便捕获输出: https://github.com/mgedmin/profilehooks/pull/26。
1.11.2 (2020-03-03)
修复了与 @functools.lru_cache() 的冲突: https://github.com/mgedmin/profilehooks/issues/25。
使用 @functools.wraps() 以正确设置装饰函数的 __wrapped__ 属性。
1.11.1 (2020-01-30)
支持 Python 3.8。
在 @coverage 中正确检测 Python 源文件编码。请参阅https://github.com/mgedmin/profilehooks/issues/24。
1.11.0 (2019-04-23)
新选项: @timecall(log_name='logger', log_level=DEBUG)。请参阅https://github.com/mgedmin/profilehooks/pull/20。
添加 Python 3.7 支持。
取消 Python 3.3 和 3.4 支持。
1.10.0 (2017-12-09)
@timecall() 现在默认使用最高精度的计时器 (timeit.default_timer()) 而不是 time.time():请参阅https://github.com/mgedmin/profilehooks/pull/11
1.9.0 (2017-01-02)
取消 Python 3.2 兼容性声明。尽管如此,一切正常运作,但我不再在 3.2 上运行自动化测试,因此可能会出现回归。
取消 Python 2.6 兼容性。
添加 Python 3.6 兼容性。
1.8.1 (2015-11-21)
在临时文件名中包含 PID:请参阅https://github.com/mgedmin/profilehooks/issues/6。
声明 Python 3.5 兼容性。
1.8.0 (2015-03-25)
新选项: @profile(stdout=False) 用于抑制输出到 sys.stdout。
1.7.1 (2014-12-02)
使 @profile(profiler='hotshot') 重新工作。这可能在 1.0 或 1.1 中损坏,但没有人提出异议。
修复 @profile(skip=N) 输出中缺失的空格。
使 @coverage_with_hotshot 输出与 @coverage 输出精确匹配。
100% 测试覆盖率。
声明 Python 3.4 和 PyPy 兼容性。
1.7 (2013-10-16)
明确声明 Python 3.3 兼容性。
修复 @coverage 的 Python 3.x 错误(停止使用 sys.maxint):请参阅https://github.com/mgedmin/profilehooks/issues/2。
1.6 (2012-06-05)
添加 Python 3.2 兼容性,取消 Python 2.3、2.4 和 2.5 兼容性。
添加了变更日志。
1.5 (2010-08-13)
为 @timecall 添加新参数:timer(默认为 time.time)。例如:@timecall(timer=time.clock)
更好的文档。
1.4 (2009-03-31)
添加了对 cProfile 的支持,当可用时将其作为默认分析器。之前 profilehooks 仅支持 profile 和 hotshot。
1.3 (2008-06-10)
将分析结果(当您将文件名传递给 @profile 时)以 pstats 格式存储,而不是 pickles。由 Florian Schulze 贡献。
1.2 (2008-03-07)
为 @timecall 添加新参数:immediate(默认为 False)。
添加了测试套件。
1.1 (2007-11-07)
第一次发布到 PyPI,包括 setup.py 等。
为 @profile 添加新参数:dirs、sort、entries。由 Hanno Schlichting 贡献。
在装饰函数时保留函数属性,如 __doc__ 和 __module__。
Pydoc 友好的文档字符串包装和其他文档字符串改进。
1.0 (2006-12-06)
将许可证从 GPL 更改为 MIT。
新装饰器:@timecall
为 @profile 添加新参数:skip、filename、immediate。
在确信 hotshot 不可靠后,添加了对 profile 的支持。将其作为默认分析器。
0.1 (2004-12-30)
第一次公开发布(实际上没有版本号),在我的博客上宣布:请参阅https://mg.pov.lt/blog/profiling.html
@profile 和 @coverage 装饰器不接受任何参数。
对于 @profile,hotshot 是唯一受支持的分析器,而 @coverage 使用 trace.py。