我经常很难在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

10-01 06:30