将python文件编译成cython会加快程序的速度吗?

将python文件编译成cython会加快程序的速度吗?,python,cython,Python,Cython,如果我将python文件编译成cython,我会看到速度的提高吗?或者我需要用cython重写代码才能真正看到改进 我在下面这样做 python convert_to_cython.py build_ext --inplace 虽然这个问题相当广泛,但一般来说是的。它确实会加速你的代码,有时会达到100 作为参考,Cython文档说,我引用 但是,对于性能关键型代码,添加静态类型声明通常很有帮助,因为它们将允许Cython跳出Python代码的动态特性,生成更简单、更快的C代码—有时会以数量级

如果我将python文件编译成cython,我会看到速度的提高吗?或者我需要用cython重写代码才能真正看到改进

我在下面这样做

python convert_to_cython.py build_ext --inplace

虽然这个问题相当广泛,但一般来说是的。它确实会加速你的代码,有时会达到100

作为参考,Cython文档说,我引用

但是,对于性能关键型代码,添加静态类型声明通常很有帮助,因为它们将允许Cython跳出Python代码的动态特性,生成更简单、更快的C代码—有时会以数量级的方式更快

像C/C++这样的语言速度更快的主要原因是它们创建了依赖于机器的汇编语言来调整所有依赖于硬件的优化。这主要是使用编译器实现的,因为

  • 静态类型变量
  • 循环展开
  • 分支预测
  • 等等

    现在Cython广泛使用静态类型变量的一个重要特性。由于python变量是无类型的,而C变量不是,Cython可以为用户提供静态修复变量类型的灵活性

    在Cython doc中,他们仅通过提及类型就展示了如何实际产生35%更快的性能

    注意不过,我的最后一句话是,在Cython中转换Python代码时要小心,因为您的项目中可能使用了一些不支持Cython的框架/API。有时,即使您将代码转换为Cython,也几乎不会改变其中的任何内容。所以这完全取决于你的代码

    因此,首先确保Python代码在Cython中的完全可移植性,并检查这是否绝对必要。

    编辑1另外一件事是,在Cython中转换代码会降低可读性,因此请注意这一点

    再次引用Cython Docs的话

    但是,必须注意,类型声明会使源代码更加冗长,因此可读性较差。因此,不鼓励在没有充分理由的情况下使用它们,例如在性能关键的部分,基准测试证明它们确实使代码速度大大加快


    编辑2回答问题,还是需要用cython重写代码才能看到改进

    因为Cython编译器为您完成了全部工作

    Cython编译器将其转换为C代码,从而对Python/CAPI进行等效调用

    由于Cython几乎可以接受任何有效的python源文件,因此入门过程中最困难的事情之一就是弄清楚如何编译扩展


    要了解更多信息,请访问当前的,这个问题太宽泛了,因为答案在很大程度上取决于Python代码的外观。如果没有看到它,或者至少对它的作用有一些了解,就不可能给你一个简单的答案

    如果您的代码主要调用来自其他编译库的函数,那么您很可能看不到任何改进,甚至可能看不到更慢的运行时。例如,有些人不明白为什么Cython不能神奇地加速他们的numpy代码。然而,像嵌套Python
    for
    循环这样的东西可以很好地加快使用Cython的速度


    您的第一步应该始终是分析您的代码(例如,使用优秀代码)。一旦你确定了瓶颈在哪里,你就可以考虑如何加速它们,可能是通过在Cython中重写它们。用Cython重写所有现有的Python代码几乎肯定是浪费时间。

    第一句话与你的答案相矛盾。@IgnacioVazquez Abrams第一句话说,通过静态地提到类型,它可以创建更快的可执行文件,我在回答中也提到了同样的内容。那么,我该如何反驳??“或者我需要用cython重写代码才能真正看到改进?”添加静态声明是重写它的一部分。要使用
    cython
    获得最佳改进,您需要阅读
    cython
    文档。关于使用cython获得预期的改进,有很多问题和答案。研究这些。而且,我不明白你的例子应该做什么。什么是
    将\u转换为\u cython.py
    ?看起来您混淆了实际Python源代码的定义。