全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

使用Cython为Python编写更快的C扩展

发布时间:2023-11-07 07:23:08
发布人:xqq

使用Python很有趣,但有时,用它编写的程序可能很慢。所有的运行时动态调度会带来很大的代价:有时它比用C或Rust等系统语言编写的等效代码慢10倍。

将代码迁移到一种全新的语言可能会在成本和可靠性方面付出巨大代价:所有的手工重写工作都将不可避免地引入错误。我们可以两者兼得么?

为了练习一下优化,我们需要一些慢代码。有什么比斐波那契数列的意外指数实现更慢?

deffib(n):

ifn<2:

return1

returnfib(n-1)+fib(n-2)

由于对fib的调用会导致两次再次调用,因此这种效率极低的算法需要很长时间才能执行。例如,在我的新笔记本电脑上,fib(36)需要大约4.5秒。这个4.5秒会成为我们探索Python的Cython扩展能提供的帮助的基准。

使用Cython的正确方法是将其集成到setup.py中。然而,使用pyximport可以快速地进行尝试。让我们将fib代码放在fib.pyx中并使用Cython运行它。

>>>importpyximport;pyximport.install()

>>>importfib

>>>fib.fib(36)

只使用Cython而不修改代码,这个算法在我笔记本上花费的时间减少到大约2.5秒。几乎无需任何努力,这几乎减少了50%的运行时间。当然,得到了一个不错的成果。

加把劲,我们可以让它变得更快。

cpdefintfib(intn):

ifn<2:

return1

returnfib(n-1)+fib(n-2)

我们将fib中的代码变成用cpdef定义的函数,并添加了两个类型注释:它接受一个整数并返回一个整数。

这个变得快多了,大约只用了0.05秒。它是如此之快,以至于我可能开始怀疑我的测量方法包含噪声:之前,这种噪声在信号中丢失了。

当下次你的Python代码花费太多CPU时间时,也许会导致风扇狂转,为何不看看Cython是否可以解决问题呢?

以上内容为大家介绍了使用Cython为Python编写更快的C扩展,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/

python培训

相关文章

Python类和对象

Python类和对象

2023-11-07
Python构造函数该怎么写?

Python构造函数该怎么写?

2023-11-07
Python继承性和 java 是一样的吗?

Python继承性和 java 是一样的吗?

2023-11-07
如何在 python 中打开文件?

如何在 python 中打开文件?

2023-11-07

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取