【发布时间】:2012-03-17 01:56:29
【问题描述】:
我有一些大型 mysql 数据库,其中包含用于计算的数据和一些我需要从外部网站获取数据的部分。
到现在为止,我都是用 python 来做的,但是我该说什么呢:它不是一个 speedster。
现在我正在考虑使用 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 分钟 :))))
【问题讨论】:
-
你确定延迟是在python代码的执行上吗?通常,如果您正在处理外部数据或数据库,则存在速度瓶颈(千比一)。我会验证它是python代码。那就看看
cython或psyco能不能帮到你! -
如果你需要从外部网站获取数据,你的编程语言肯定不会成为瓶颈。我不确定你在这里走的是正确的道路。为什么不坚持使用 Python?编辑:@gahooa 打败了我 :)
-
脚本在专用服务器以及数据库上运行。唯一真正外部的是需要下载和解析的网站和 Web 服务。下载速度不会提高,但解析时间和整个数据的计算时间一样。希望我理解正确。
-
@DavidTitarenco 网站的部分就像我的程序必须做的 1-2%。 1. 如果有一些新数据可用,我必须下载它,解析它,然后将其放入数据库。 2. 每小时检查新数据可用。所以这不是速度问题。
-
-1 这完全不是问题,原因有两个:1)您的瓶颈几乎肯定不是您描述的用例中的 CPU。 2) 如果将 Python 嵌入 C++ 会导致 Python 代码被解释,那么显然用 C++ 编写瓶颈代码并从 Python 中调用它会更好。
标签: c++ python embedding extending