22.3 相关话题

  1. SWIG

有一个外部工具叫SWIG,是Simplified Wrapper and Interface Generator的缩写。其作者为大卫•比兹利(David Beazley),同时也是《Python Essential Referenc》一书的作者。这个工具可以根据特别注释过的C/C++头文件生成能给Python、Tel和Perl使用的包装代码。使用SWIG可以省去你写前面所说的样板代码的时间,你只要关心怎么用C/C++解决你的实际问题就好了。你所要做的就是按SWIG的格式编写文件,其余的就都由SWIG来完成。你可以通过下面的网址找到关于SWIG的更多信息。

http://swig.org

  1. Pyrex

创建C/C++扩展的一个很明显的缺点是你必须要写C/C++代码。你能利用它们的优点,但更重要的是,你也会碰到它们的缺点。Pyrex可以让你只取扩展的优点,而完全没有后顾之忧。它是一种更偏向Python的C语言和Python语言的混合语言。事实上,Pyrex的官方网站上就说“Pyrex是具有C数据类型的Python“。你只要用Pyrex的语法写代码,然后运行Pyrex编译器去编译源代码。Pyrex会生成相应的C代码,这些代码可以被编译成普通的扩展。你可以在它的官方网站下载到Pyrex:

http://cosc.canterbury.ac.nz/~greg/python/Pyrex

  1. Psyco

Pyrex免去了我们再去写纯C代码的麻烦。不过,你要去学会它的那一套与众不同的语法。最后,你的Pyrex代码还是会被转成C的代码。无论你用C/C++、C/C++加上SWIG,或者是Pyrex,都是因为你想要加快你的程序的速度。如果你可以在不改动你的Python代码的同时,又能获得速度的提升,那该多好啊。

Psyco的理念与其他的方法截然不同。与其改成C的代码,为何不让你已有的Python代码运行的更快一些呢?

Psyco是一个just-in-time(JIT)编译器,它能在运行时自动把字节码转为本地代码运行。所以,你只要(在运行时)导入Psyco模块,然后告诉它要开始优化代码就可以了,而不用修改自己的代码。

Psyco也可以检查你代码各个部分的运行时间,以找出瓶颈所在。你甚至可以打开日志功能,来查看Psyco在优化你的代码的时候都做了些什么。你可以访问以下网站获取更多的信息:

http://psyco.sf.net

4.嵌入

嵌入是Python的另一功能。与把C代码包装到Python中的扩展相对的,嵌入是把Python解释器包装到C的程序中。这样做可以给大型的、单一的、要求严格的、私有的并且(或者)极其重要的应用程序内嵌Python解释器的能力。一旦内嵌了Python,世界完全不一样了。

Python提供了很多官方文档供写扩展的人参考。

下面是一些与本章相关的Python文档:

扩展与嵌入

http://docs.python.org/ext

Python/C API

http://docs.python.org/api

分发Python模块

http://docs.python.org/dist