将python与c集成以提高性能是否合理?

时间:2009-06-02 17:54:54

标签: python c performance

我喜欢使用python几乎所有的东西,并且总是清楚地知道如果由于某种原因我在我的python代码中找到了瓶颈(由于python的限制),我总是可以使用集成到我的C脚本代码。

但是,当我开始阅读有关如何集成python的guide时。在文章中,作者说:

为什么人们可能希望在C或C ++中扩展Python有几个原因,例如:

  
      
  • 在现有库中调用函数。
  •   
  • 向Python添加新的内置类型
  •   
  • 优化代码中的内部循环
  •   
  • 向Python公开C ++类库
  •   
  • 在C / C ++应用程序中嵌入Python
  •   

关于表现没什么。所以我再问一遍,将python与c集成以获得性能是否合理?

7 个答案:

答案 0 :(得分:8)

  

*优化代码中的内部循环

那不是性能吗?

答案 1 :(得分:8)

根据我的经验,很少需要使用C进行优化。我更喜欢在Python中识别这些领域的瓶颈和改进算法。使用哈希表,缓存以及通常重新组织数据结构以满足未来需求,可以极大地加速您的程序。随着您的程序开发,您将更好地了解可以预先计算哪种材料,因此不要害怕返回并重做您的存储和算法。此外,寻找机会杀死“一石二鸟”,例如在渲染物体时对物体进行分类,而不是做大量的物种。

当所有事情都根据您的知识运作时,我会考虑使用像Psyco这样的优化器。我只是通过使用Psyco并在我的程序中添加一行来实现10倍的性能提升。

如果所有其他方法都失败了,请在适当的地方使用C,然后你就可以得到你想要的东西。

答案 2 :(得分:7)

性能是一个广泛的主题,因此您应该更具体。如果程序中的瓶颈涉及大量网络,那么用C / C ++重写它可能不会产生任何影响,因为它是网络调用占用时间而不是代码。您最好重写程序的慢速部分以减少网络调用,从而减少程序花在等待entwork IO上的时间。如果你正在做数学密集型的东西,比如求解微分方程,而且你知道有C库可以提供更好的性能,那么你目前在Python中的方式可能需要重写你的程序部分来使用这些库增加它的性能

答案 3 :(得分:4)

C扩展API非常难以使用,但还有许多其他方法可以集成C代码。

对于一些更有用的替代方案,请参阅http://www.scipy.org/PerformancePython,特别是关于使用Weave轻松内联C代码的部分。

同样令人感兴趣的是Cython,它为与C代码集成提供了一个很好的系统。 Cython用于一些备受推崇的高性能Python项目(如NumPySage)进行优化。

如上所述,Psyco是另一个有吸引力的优化选项,requires只是

import psyco
psyco.bind(myfunction)

Psyco将识别您的内部循环并自动替换例程的优化版本。

答案 4 :(得分:3)

C绝对可以加速处理器绑定任务。现在使用ctypes库可以更轻松地进行集成,或者您可以使用您提到的任何其他方法。

如果您想以他们的代码为例,我觉得mercurial在集成方面做得很好。计算密集型任务在C中,其他一切都是python。

答案 5 :(得分:2)

使用Python中的C(假设您的代码写得很好等)可以获得很大的性能提升,因为Python是在运行时解释的,而C是事先编译的。这将加速一些事情,因为使用C,您的代码只是运行,而使用Python,Python解释器必须弄清楚您正在做什么并将其解释为机器指令。

答案 6 :(得分:1)

我被告知计算部分使用C来编写脚本使用python。所以是的,你可以整合两者。 C能够比python

更快地进行计算