Cannot use line_profiler with Cython

扶醉桌前 提交于 2019-12-07 02:44:25

问题


Based on the answer to this question I was trying to use the line_profiler with a cythonized function.

On the abovementioned question, the accepted answer gives us an example on how to use it with jupyter notebook.

However, when I try to build the pyx file using disutils it doesn't work.

We I plainly try to run the script using

kernprof -l -v script.py

It only returns the the Timer unit elapsed time.

If I try to decorate the function on the cython file using @profile, it doesn't compile returning:

undeclared name not builtin: profile

Any ideas ?


回答1:


The profile decorator is injected into the globals namespace by kernprof and is thus not available at compile time. However, you can apply the profile decorator to a function even after it has been defined. For example, in your script.py you could write the following.

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

The third line of the snippet will fail if you run the script using standard python, i.e. python script.py, because the profile decorator is not defined. But it should behave as intended if you run it using kernprof.



来源:https://stackoverflow.com/questions/45925921/cannot-use-line-profiler-with-cython

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!