我正在我的 Python 网络应用程序中实现一种算法,它包括进行一些(可能)大型聚类和矩阵计算。我已经看到 Python 可以使用 C/C++ 库,并认为利用它来加快速度可能是个好主意。
首先:是否有任何理由不这样做,或者在这样做时我应该记住什么?
其次:我不太愿意将 C 连接到 MySQL(我会在其中获取计算数据)。这在任何方面都是合理的吗?
最佳答案
使用生态系统。
对于矩阵,使用 numpy 和 scipy 可以提供与 Matlab 等工具大致相同的功能范围。如果您学习使用这些模块编写惯用代码,则内部循环可以在模块的 C 或 FORTRAN 实现中进行,从而在大多数任务中获得类似 C 的整体性能和 Python 的表现力。您可能还对 numexpr 感兴趣,它可以进一步加速并在某些情况下并行化 numpy/scipy 表达式。
如果您必须用 Python 编写计算密集型内部循环,请先认真考虑一下。也许您可以以更适合 numpy/scipy 的方式重新表述问题。或者,也许您可以使用 Python 中可用的数据结构来提出更好的算法,而不是更快地实现相同的算法。如果没有,还有 Cython,它使用 Python 的一个受限子集来编译为机器代码。
只有作为最后的手段,并且在分析确定绝对最严重的瓶颈之后,您才应该考虑用 C/C++ 编写扩展模块。有很多更简单的方法可以满足绝大多数性能要求,而数字/数学代码是一个拥有非常好的现有库支持的领域。
关于python - 在 Python(还有 MySQL)中使用 C/C++ 进行繁重的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23491608/