2024-06-07 17:52:55 发布
网友
Python社区已经发布了有用的参考资料,展示了如何评测Python代码,以及用C或Cython编写的Python扩展的技术细节。我仍在搜索教程,这些教程显示了非常重要的Python程序的以下内容:
一个好的教程将为读者提供一种方法论,说明如何通过一个完整的例子来解释优化问题。我找不到这样的资源。在
你知道(或者你写过)这样的教程吗?
为了澄清,我对只涉及以下内容的教程不感兴趣:
点1和点2只是拇指的基本优化规则。如果有任何地方有你想要的那种辅导,我会非常惊讶的。也许这就是你没找到的原因。我的短名单:
只需使用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技能。在
希望这有帮助。在
点1和点2只是拇指的基本优化规则。如果有任何地方有你想要的那种辅导,我会非常惊讶的。也许这就是你没找到的原因。我的短名单:
只需使用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技能。在
希望这有帮助。在
相关问题 更多 >
编程相关推荐