基于对this question的回答,我试图将line_profiler与cythonized函数一起使用。
在上述问题上,接受的答案为我们提供了一个如何在jupyter笔记本中使用它的例子。
但是,当我尝试使用disutils构建pyx
文件时,它无法正常工作。
我明确地尝试使用
运行脚本kernprof -l -v script.py
它只返回Timer unit
已用时间。
如果我尝试使用@profile
修饰cython文件中的函数,它就不会编译返回:
undeclared name not builtin: profile
有什么想法吗?
答案 0 :(得分:2)
profile
装饰器由globals
注入到kernprof
命名空间中,因此在编译时不可用。但是,您可以apply the profile
decorator to a function even after it has been defined。例如,在您的script.py
中,您可以编写以下内容。
from cython_module import function_to_be_profiled
# Apply the `profile` decorator
function_to_be_profiled = profile(function_to_be_profiled)
# Use function_to_be_profiled as intended
如果您使用标准python即python script.py
运行脚本,则代码段的第三行将失败,因为未定义profile
装饰器。但是,如果您使用kernprof
运行它,它应该表现出预期的效果。