python - Python-then-profile-then-C 设计模式的最佳实践?

标签 python c refactoring profiling

一种流行的软件开发模式似乎是:

  1. 研究 Python 中的逻辑和算法。
  2. 分析以找出慢位所在的位置。
  3. 用 C 替换那些。
  4. 交付在高级和快速之间取得最佳平衡的代码。

我说流行只是因为我看到人们谈论它是一个好主意。

但是有没有大型项目实际使用过这种方法呢?最好是免费软件项目,这样我就可以看看他们是如何做到的 - 也许还能学习一些最佳实践。

最佳答案

人们处理开发的方式有很多种。

有时候人家按照你的三步走,发现慢一点是因为外部环境,所以把Python改成C也解决不了问题。这种缓慢有时可以在系统端解决,有时可以通过应用不同的算法在 Python 中解决。例如,您可以缓存网络响应,这样您就不必每次都访问网络,或者在 SQL 中,您可以将工作卸载到在服务器上运行的“存储过程”并减少结果集的大小。通常,当您确实有需要用 C 重写的东西时,要做的第一件事就是寻找一个预先存在的库,如果尚不存在,则创建一个 Python 包装器。在您之前,有很多人已经走上了这条道路。

通常第 1 步是研究应用程序架构,怀疑某些区域可能存在性能问题,然后选择一个 C 库(可能已经为 Python 包装)并使用它。然后第 2 步只是确认没有真正需要解决的大性能问题。

我想说,对于拥有一个或多个经验丰富的开发人员的团队来说,最好从一开始就尝试预测性能瓶颈并使用预先存在的模块来缓解它们。如果您是 Python 的初学者,那么您的 3 步过程是完全有效的,即开始构建和测试代码,知道有一个分析器和快速 C 模块的可能性(如果您需要的话)。然后是 psyco,以及用于将应用程序卡住为二进制可执行文件的各种工具。

如果您知道自己需要使用某些 C 或 C++ 模块,则另一种方法是从头开始用 C 编写应用程序,但嵌入 Python 来完成大部分工作。这对于经验丰富的 C 或 C++ 开发人员来说效果很好,因为他们对用 C 编写的代码类型有一个大致的了解。

关于python - Python-then-profile-then-C 设计模式的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582718/

相关文章:

javascript - OpenCV在python和javascript之间调整了大不相同的结果

python - 如何在C中打印多行

c++ - ptxas "double is not supported"在结构数组上使用 thrust::sort 时发出警告

c - open() 第一次尝试失败

programming-languages - 您重构代码的频率和频率如何?

javascript - JSLint 说有 "too many var statements"背后的原因是什么

PHP使用@转义错误报告

python - 如何在 Python 中使用 Youtube API 在 channel 中创建广播?

python - 使用类似的语法将使用 MATLAB 创建的矩阵转换为 Numpy 数组

c - 在 C 中采用 long 值并以相反顺序返回其字节的函数