Cython对Python的性能优化

问题描述 投票:0回答:1

我正在学习Python,遇到了名为Cython的东西,有助于提高性能。后来,我发现了Instagram开发人员的演讲https://www.youtube.com/watch?v=_1MSX7V28Po,他在演讲中说Cython在Python优化方面确实很有帮助。但简短地提到,如果仅添加Cython很好,但是如果您为python代码添加类型注释。您可以获得更好的性能。因此,问题是真的吗?只要添加cython,我们就能获得性能提升,但是如果我们为python代码添加TYPE ANNOTATIONS,那么性能提升会更好吗?

python cython
1个回答
0
投票

[看一下documentation,我想我们可以回答您的问题。

但是,对于性能至关重要的代码,添加静态类型声明通常会很有帮助,因为它们将使Cython脱离Python代码的动态本质,并生成更简单,更快速的C代码-有时按顺序提高速度幅度。

没有类型注释的示例:

def f(x):
    return x ** 2 - x


def integrate_f(a, b, N):
    s = 0
    dx = (b - a) / N
    for i in range(N):
        s += f(a + i * dx)
    return s * dx

仅在Cython中进行编译仅能使速度提高35%。这总比没有好,但是添加一些静态类型可以带来更大的不同。

带有类型注释的示例:

def f(double x):
    return x ** 2 - x


def integrate_f(double a, double b, int N):
    cdef int i
    cdef double s, dx
    s = 0
    dx = (b - a) / N
    for i in range(N):
        s += f(a + i * dx)
    return s * dx

由于迭代器变量i是用C语义键入的,因此for循环将被编译为纯C代码。输入a,s和dx很重要,因为它们涉及for循环中的算术;键入b和N的区别不大,但是在这种情况下,一致并键入整个函数并不需要太多的工作。

这比纯Python版本的速度提高了4倍。

因此看来,仅使用Cython确实提供了性能提升,而添加类型注释则提供了更多的性能提升。

© www.soinside.com 2019 - 2024. All rights reserved.