Linker Lin's Blog

我思故我在

Cython的优势和Python性能优化

Python的性能一直是很多人惦记的问题。但是实际上,Python的IO性能并不低。主要的性能瓶颈有2个:

GC瓶颈

由于CPython采用的是引用计数。所以,为了解决循环引用,CPython引入了一个探测器。这个探测器每隔N次对象创建就会启动一次。这在有比较繁杂的逻辑的Server端程序上是非常的要命的。 但是解决方法却很简单。直接关闭GC。 这并不会导致大量的内存泄漏,因为,Python已经用了引用计数来管理大部分内存。只有少数的存在循环引用的场合会泄漏内存。 这个只需要定期启动GC,即可。例如每10分钟启动一次。

CPU密集运算瓶颈

这里就是Cython最擅长的地方了。 只需要在原有的Python代码上标注上类型。即可把性能提升30%~2000%.由于CPU密集型的场合占整个代码的比例往往是很有限的。所以,这些改动的成本是很低的。

性能以外

Cython除了可以提升运行时性能外,还有一个好处,就是可以保护源码。不同于Python的pyc文件,Cython只生成C代码,然后再编译到.so。所以,几乎没有可能做反向工程来获得源码。故也很适合需要发布可执行文件的客户端开发。

总结

不要过于纠结Python的性能了。