无法将 line_profiler 与 Cython 一起使用

Cannot use line_profiler with Cython

基于 I was trying to use the line_profiler 的答案,使用 cythonized 函数。

关于上述问题,接受的答案给了我们一个关于如何在 jupyter notebook 上使用它的例子。

但是,当我尝试使用 disutils 构建 pyx 文件时,它不起作用。

我们尝试 运行 脚本使用

kernprof -l -v script.py

它只 returns Timer unit 经过时间。

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

undeclared name not builtin: profile

有什么想法吗?

profile 装饰器由 kernprof 注入到 globals 命名空间中,因此在编译时不可用。但是,您可以 。例如,在您的 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.

运行 它应该会按预期运行