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

2024-06-07 17:52:55 发布

您现在位置:Python中文网/ 问答频道 /正文

Python社区已经发布了有用的参考资料,展示了如何评测Python代码,以及用C或Cython编写的Python扩展的技术细节。我仍在搜索教程,这些教程显示了非常重要的Python程序的以下内容:

  1. 如何通过转换到C扩展来识别从优化中受益的热点
  2. 同样重要的是,如何识别从转换为C扩展中获益的热点
  3. 最后,如何从Python到C进行适当的转换,可以使用Python C-API,也可以使用Cython。在

一个好的教程将为读者提供一种方法论,说明如何通过一个完整的例子来解释优化问题。我找不到这样的资源。在

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

为了澄清,我对只涉及以下内容的教程不感兴趣:

  • 使用(c)Profile来分析Python代码以测量运行时间
  • 使用工具检查配置文件(我建议使用RunSnakeRun
  • 通过选择更合适的算法或Python构造进行优化(例如,成员资格测试的集合而不是列表);本教程应该假设算法和Python代码已经是最佳的,并且我们正处在一个C扩展是下一个逻辑步骤的点上
  • 重述一下Python documentation on writing C extensions,它作为一个很好的参考已经很好了,但是对于展示何时以及如何从Python迁移到C语言,它并没有什么用处

Tags: 代码程序算法api教程资源profile社区
3条回答

点1和点2只是拇指的基本优化规则。如果有任何地方有你想要的那种辅导,我会非常惊讶的。也许这就是你没找到的原因。我的短名单:

  • 优化的第一条规则是不要。在
  • 规则2测量
  • 第三条规则确定限制因素(如果它是IO或数据库绑定的,那么任何优化都不可能达到)。在
  • 第四条规则是思考使用更好的算法和数据结构 ... 在
  • 考虑到语言的改变在名单上是很低的。。。在

只需使用usual python tools来分析python代码。找到您的代码需要优化的地方。然后试着用python优化它。如果仍然太慢,试着去理解原因。如果是IO绑定的,C程序不太可能更好。如果问题来自于算法,那么C也不太可能表现得更好。实际上,C可以提供帮助的“好”情况是非常罕见的,运行时不应该离您想要的太远(比如2到3倍的加速)数据结构很简单,可以从低级表示中获益,而您确实非常需要这种加速。在大多数其他情况下,使用C而不是python将是一项没有回报的工作。在

实际上,从python调用C代码时,将性能作为首要目标是非常罕见的。更常见的目标是将python与一些现有的C代码进行接口。在

正如另一张海报上说的,你最好还是使用cython。在

如果您仍然想为Python编写一个C模块,那么所有必需的都在official documentation.

对于第1点和第2点,我将使用Python分析器,例如cProfile。有关快速教程,请参见here。在

如果已经有一个已经存在的python程序,对于第3点,您可能需要考虑使用Cython。当然,与其用C重写,不如想出一个算法改进来提高执行速度。在

O'Reilly has a tutorial(据我所知,我可以免费阅读全部内容),它演示了如何评测一个真实的项目(他们使用EDI解析项目作为分析的主题)并识别热点。在O'Reilly的文章中,没有太多关于编写C扩展来解决瓶颈的细节。但是,它确实用一个非常重要的例子来说明您想要的前两件事。在

编写C扩展的过程已经被很好地记录了here。最困难的部分是想出一些方法来复制Python代码在C中所做的事情,这需要一些在教程中很难教授的东西:独创性、算法知识、硬件和效率,以及相当多的C技能。在

希望这有帮助。在

相关问题 更多 >

    热门问题