Python 分析:使用 line_profiler 的 @profile 装饰器会导致错误
Posted
技术标签:
【中文标题】Python 分析:使用 line_profiler 的 @profile 装饰器会导致错误【英文标题】:Python profiling: using line_profiler's @profile decorator results in error 【发布时间】:2014-11-21 07:55:01 【问题描述】:我正在尝试使用 line_profiler
模块分析一些 Python 代码,但我无法让它工作。我在 Windows 7 上并使用 Python 2.7.6。
在以下test.py
文件上运行kernprof -l -v test.py
时:
@profile
def test():
a = 1
b = 1
return a + b
if __name__ == '__main__':
print test()
我明白了:
C:\>kernprof -l -v C:\test.py
Wrote profile results to test.py.lprof
Timer unit: 3.01262e-07 s
Traceback (most recent call last):
File "C:\path_to_kernprof\kernprof-script.py", line 10, in <module>
sys.exit(main())
File "C:\path_to_kernprof\kernprof.py", line 221, in main
execfile(script_file, ns, ns)
File "C:\test.py", line 1, in <module>
@profile
NameError: name 'profile' is not defined
显然,如果我注释掉包含line_profiler
的@profile 装饰器的行,代码将运行良好。我做错了什么,在这里?
【问题讨论】:
我无法重现您的错误。 我认为这是某种安装问题。 附带说明一下,我已经切换到pprofile
模块以满足我的分析需求,它工作得很好。
我遇到了同样的错误,pprofile
也适用于我。非常感谢!
【参考方案1】:
可能与 python 2 和 futures 有关,请参阅this 错误报告,this 拉取请求修复了此问题。在新版本上传到pypi之前,可以根据commit修改代码。
【讨论】:
【参考方案2】:from memory_profiler import profile
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
或:
python -m memory_profiler example.py
https://pypi.org/project/memory-profiler/
【讨论】:
【参考方案3】:这是 networkx
包 1.11 中的一个错误的结果。像这样降级:
pip uninstall networkx
pip install networkx==1.7
【讨论】:
我遇到了同样的问题。不幸的是,Networkx 降级并没有解决它。以上是关于Python 分析:使用 line_profiler 的 @profile 装饰器会导致错误的主要内容,如果未能解决你的问题,请参考以下文章
Python,django:用line_profiler工具分析代码的性能