c++ - 速度——在 C++ 中嵌入 Python 或使用 C++ 扩展 Python

标签 c++ python embedding extending

我有一些大型 mysql 数据库,其中包含用于计算的数据,还有一些部分需要从外部网站获取数据。

到目前为止,我一直使用 Python 来完成所有工作,但我该怎么说:它不是速度极快的。

现在我正在考虑使用 Boost::Python 和 Python C API 将 Python 与 C++ 混合。

我现在的问题是:提高速度的更好方法是什么。 我应该用一些 C++ 代码扩展 Python 还是应该将 Python 代码嵌入到 C++ 程序中?

我肯定会在计算部分使用 C++ 代码提高一些速度,我认为在 C 应用程序内部调用 Python 解释器不会更好,因为 Python 解释器将一直运行。而且我必须包装像 mysqldb 或 urllib3 这样的 python 库,以便有一种在 c++ 中工作的好方法。

那么您认为哪种方法更好:扩展还是嵌入? (我喜欢 python 语言,但我也熟悉 c++ 并尊重它的速度)

更新: 所以我将一些部分从 python 切换到 c++,并在我的 c 模块中使用多线程(真正的),我的程序现在需要而不是 7 小时 30 分钟:))))

最佳答案

原则上,我同意前两个答案。来自磁盘或网络连接的任何东西都可能成为比应用程序更大的瓶颈。

过去 50 年的所有研究表明,人们对系统性能问题的直觉往往不准确。所以恕我直言,您确实需要通过衡量实际发生的事情来收集一些证据,然后根据这些证据选择解决方案。

要尝试确认导致性能缓慢的原因,请测量应用程序的系统和用户时间(例如 time python prog.py),并测量机器上的负载。

如果应用程序正在用尽 CPU,并且大部分时间花在应用程序(用户时间)上,那么可能需要为应用程序使用更有效的技术。

但是如果 CPU 没有达到最大值,或者应用程序的大部分时间都花在系统(系统时间)上,而不是在应用程序(用户时间)上,那么更改应用程序编程技术不太可能有显着帮助. (这是阿姆达尔定律的一个例子 http://en.wikipedia.org/wiki/Amdahl%27s_law )

您可能还需要测量数据库服务器的性能,可能还需要测量网络连接,以确定瓶颈的来源,但从最简单的部分开始。

关于c++ - 速度——在 C++ 中嵌入 Python 或使用 C++ 扩展 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9746586/

相关文章:

c++ - 将 .lib 项目转换为 exe 一个

C++问题 "adapting"一个三参数类模板变成一个二参数类模板

java - 用于面向平面文件的处理代理的开源框架

python - 如何使用peewee更新多条记录

python - 更新 JPEG 文件中的 JFIF 缩略图

c++ - 使用未知指针类型调用函数重载

go - 使用堆栈跟踪创建自定义错误

python - Keras - 嵌入层中的掩码零填充

go - 不同的结构重用相同的方法

c++ - binary_log_types.h : No such file or directory