为整个程序启用 Cython 分析?

Posted

技术标签:

【中文标题】为整个程序启用 Cython 分析?【英文标题】:Enable Cython profiling for whole program? 【发布时间】:2014-12-09 17:01:55 【问题描述】:

Cython 文档说“Cython 中的分析由编译器指令控制。可以通过 Cython 装饰器为整个文件或每个函数设置它。”

是否有任何简单的方法可以为整个 Python 程序启用 Cython 分析?也就是说,有没有办法让我不必在每次想要打开和关闭分析时都将# cython: profile=True 添加到几十个文件中?

【问题讨论】:

【参考方案1】:

我相信您可以通过将命令行上的选项传递给cython 来全局设置指令。它在“如何设置指令”(http://docs.cython.org/src/reference/compilation.html#how-to-set-directives) 下文档的“编译”部分中进行了描述。

也可以使用 -X 开关在命令行上传递指令:

$ cython -X boundscheck=True ...

在命令行上传递的指令将覆盖头 cmets 中设置的指令。

如果您通过distutils (setup.py) 编译并使用cythonize 函数,您似乎可以添加选项compiler_directives,这是一个将指令名称映射到相应值的字典。我还没有找到有关此功能的文档,但它似乎是 cython 程序如何调用 cythonize 函数 (https://github.com/cython/cython/blob/master/Cython/Build/Cythonize.py#L83)。

例如

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = "My hello app",
    ext_modules = cythonize("src/*.pyx",
                            compiler_directives='profile': True)
)

【讨论】:

应该记录这个 compiler_directives 选项。我花了太长时间才找到这个。

以上是关于为整个程序启用 Cython 分析?的主要内容,如果未能解决你的问题,请参考以下文章

Cython 代码分析

分析 Cython 代码时,啥是`stringsource`?

在 jupyter 笔记本中使用 cython 进行行分析

Cython 相关

Cython:从 C 程序调用 Python 代码

如何在 Cython 中将大型 malloc 数组返回或保存为 Python 对象?