有关使用C扩展或Cython优化非平凡Python应用程序的教程

got*_*nes 25 c python optimization cython python-extensions

Python社区发布了有用的参考资料,展示了如何分析Python代码,以及C或Cython中Python扩展的技术细节.我仍在搜索教程,但是,对于非平凡的Python程序,显示如下:

  1. 如何通过转换为C扩展来识别将从优化中受益的热点
  2. 同样重要的是,如何识别不会从转换为C扩展中受益的热点
  3. 最后,如何使用Python C-API或(甚至可能更好)使用Cython进行从Python到C的适当转换.

一个好的教程将为读者提供一种方法,通过完成一个完整的例子来说明如何推理优化问题.我没有成功找到这样的资源.

你知道(或有你写过)这样的教程吗?

为了澄清,我对涵盖以下内容的教程不感兴趣:

  • 使用(c)Profile来分析Python代码以测量运行时间
  • 使用工具检查配置文件(我推荐RunSnakeRun)
  • 通过选择更合适的算法或Python构造进行优化(例如,用于成员资格测试而不是列表的集合); 本教程应该假设算法和Python代码已经是最优的,并且我们处于C扩展是下一个逻辑步骤的位置
  • 重新编写关于编写C扩展Python文档,这已经很好地作为参考,但作为显示何时以及如何从Python移动到C的资源无用.

kri*_*iss 9

第1点和第2点只是拇指的基本优化规则.如果您正在寻找任何类型的教程,我会非常惊讶.也许这就是你没找到的原因.我的短名单:

  • 规则第一的优化是.
  • 规则第二项措施
  • 规则三标识限制因素(如果它是IO或数据库绑定,无论如何都不能进行优化).
  • 规则四是思考,使用更好的算法和数据结构 ......
  • 考虑到语言的变化在列表中相当低......

首先,使用常用的python工具分析你的python代码.找到您需要优化的代码.然后尝试优化它坚持使用python.如果它仍然太慢,试着理解为什么.如果它受IO限制,则C程序不太可能更好.如果问题来自算法,那么C也不太可能表现得更好.实际上C可以提供帮助的"好"案例非常少见,运行时不应该离你想要的太远(比如3倍加速中的2倍)数据结构很简单并且会受益于低级别的表示,你真的,真的需要加速.在大多数其他情况下,使用C而不是python将是一项无益的工作.

实际上,很少有人从python中调用C代码,并将性能作为主要目标.更常见的目标是将python与一些现有的C代码连接起来.

正如另一张海报所说,你可能会更好地建议使用cython.

如果你仍然想为Python编写一个C模块,那么所有必要的都在官方文档中.


Raf*_*ler 6

O'Reilly有一个教程(据我所知,我可以自由阅读,我能够阅读整个内容),它说明了如何分析真实项目(他们使用EDI解析项目作为分析主题)并识别热点.编写C扩展名没有太多细节可以解决O'Reilly文章中的瓶颈问题.但是,它确实涵盖了你想要的前两件事,并带有一个非常重要的例子.

编写C扩展的过程在这里有很好的记录.困难的部分是提出了复制Python代码在C中所做的事情的方法,并且需要教程中难以教授的东西:独创性,算法知识,硬件和效率,以及相当多的C技能.

希望这可以帮助.