不能将line_profiler与Cython一起使用

时间:2017-08-28 19:14:57

标签: python cython line-profiler

基于对this question的回答,我试图将line_profiler与cythonized函数一起使用。

在上述问题上,接受的答案为我们提供了一个如何在jupyter笔记本中使用它的例子。

但是,当我尝试使用disutils构建pyx文件时,它无法正常工作。

我明确地尝试使用

运行脚本
kernprof -l -v script.py

它只返回Timer unit已用时间。

如果我尝试使用@profile修饰cython文件中的函数,它就不会编译返回:

undeclared name not builtin: profile

有什么想法吗?

1 个答案:

答案 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运行它,它应该表现出预期的效果。