带有 c 模块的 Python 的性能

Posted

技术标签:

【中文标题】带有 c 模块的 Python 的性能【英文标题】:Performance of Python with c modules 【发布时间】:2015-10-20 05:45:11 【问题描述】:

我每周都有一个启发式问题解决课程的作业。这些作业至少占用了我一周中的 3-4 天(我想减少这个时间)。作业中提出的问题是计算密集型的,我们需要在 2 分钟的程序执行时间内给出最佳答案。我开始在 C++ 中进行分配以获得良好的运行时性能。美好的。但是,我最终不得不使用指针等,以免在任何地方创建数据副本。但这通常会导致更多的调试时间。所以我切换到java来完成我的下一个任务。与 c++ 相比,性能有点低,但可以节省我的周末时间。

我分析了我的 java 程序,发现一个函数占用了 95% 的 cpu 时间。在这种情况下,我想问,如果我使用 python 来编写我的分配解决方案,对其进行分析,找出占用 cpu 时间最多的函数,使用 c-modules 实现它们。我能做得更好吗?我可以减少我的开发时间(bcz 我个人发现在 python 上的开发速度更快),因为我会在 c 模块中实现占用 95% cpu 时间的函数,所以我不应该对性能造成影响。

这是我可以尝试的吗?我可以试试这个(python + c-modules)并自己检查(不在这里寻求帮助),但如果我失败了,我可能没有时间用 c++ 或 java 重新实现我的整个作业。

【问题讨论】:

【参考方案1】:

如果您正在寻找性能,您应该知道 Python 比 C++ 慢 10 到 100 倍。根据您正在寻找的性能,您可以通过优化代码或使用一些 3rd 方库来进行数字运算,如 scipy。

可以考虑使用 Cython,但您希望通过使用 python 来缩短开发时间?使用 C-Modules 会引入更多复杂性,并且 Cython 无论如何都有不同的语法。

【讨论】:

由于我将使用 c-modules 实现只有 1 或 2 个功能,我不应该期望开发时间会出现大幅增长。对吗? 为什么不直接用 C++ 编码呢?如果你只有 1-2 个函数? 我有很多功能。但通常只有 1-2 个函数占用 95% 的 cpu 时间。

以上是关于带有 c 模块的 Python 的性能的主要内容,如果未能解决你的问题,请参考以下文章

一行代码实现Python运行性能增强百倍,性能发动机numba模块介绍

一行代码实现Python运行性能增强百倍,性能发动机numba模块介绍

Python脚本性能剖析

Python与C的互相调用

带有相关子查询的 While 循环的 SQL Server 性能调整

C++ vs python numpy 复杂数组的性能