我经常很难在cython
代码中找到瓶颈。如何逐行分析cython
函数?
最佳答案
罗伯特·布拉德肖(Robert Bradshaw)帮助我获得了罗伯特·肯恩(Robert Kern)的line_profiler
工具用于cdef
函数的工作,我想我应该在stackoverflow
上共享结果。
简而言之,请建立一个常规的.pyx
文件并构建脚本,并在调用cythonize
之前添加以下内容。
# Thanks to @tryptofame for proposing an updated snippet
from Cython.Compiler.Options import get_directive_defaults
directive_defaults = get_directive_defaults()
directive_defaults['linetrace'] = True
directive_defaults['binding'] = True
此外,您需要通过修改CYTHON_TRACE=1
设置来定义C宏extensions
,以便extensions = [
Extension("test", ["test.pyx"], define_macros=[('CYTHON_TRACE', '1')])
]
这里是在%%cython
笔记本中使用iPython
魔术的工作示例:http://nbviewer.ipython.org/gist/tillahoffmann/296501acea231cbdf5e7