【问题标题】:Data transfer between C++ and PythonC++ 和 Python 之间的数据传输
【发布时间】:2017-02-25 11:37:58
【问题描述】:

我想在 C++ 和 Python 之间共享内存。

我的问题:

  1. 我正在使用 C++ 处理大数据集(高达 6 GB 的 RAM)。所有计算均在 C++ 中完成。
  2. 然后,我想将所有结果“粘贴”到 Python 程序中。但是我只能将我的数据写入磁盘,然后从 Python 中读取该文件,效率不高。

有没有办法“映射”与 C++ 变量对应的内存,以便我可以从 Python 访问数据?我不想将 6GB 的数据复制到硬盘上。

【问题讨论】:

  • 您可能想在 Google/Bing 中搜索“进程间通信”(IPC);你可能想看看this Stackoverflow 帖子
  • 根据您在 C++ 中拥有的代码库有多大,使用Cython 之类的东西可能是个好主意。
  • @WhiZTiM thx,目前我正在考虑 IPC 方法:共享内存,关于套接字或将文件映射到内存的文件。我知道python没有指针,但是有没有办法通过地址访问内存?
  • @Bendik 大约 7k 的 c++ 行,并且还在增长。 atm 我正在考虑通过内存地址读取python中的数据
  • 您可能希望在您的 c++ 程序中使用 embed the python interpreter,这将允许您使用 python APIs 让 python 代码访问其数据。

标签: python c++ data-transfer


【解决方案1】:

第一条路径:我认为更适合你的方式是ctypes。您可以创建一个共享库,然后在 Python 中加载共享库的功能,并在 Python 中填充您想要的所有数据容器。

在 Windows 中,您可以创建一个 DLL,而在 Linux 中,您可以创建一个共享的 .so 库。

现在这样做的好处是它将独立于您的 Python 版本。

第二条路径:我认为它不太合适,但你可以让它工作,即Python C Extension。有了这个,你可以调用 Python 数据容器 (PyObjects) 并将它们填充到 C 中。

但是,您在此处编译的代码将始终需要链接到 Python 库。

使用哪一个?

  • 如果您想在 C/C++ 中调用某些函数,请使用 ctypes,然后在 Python 中完成其余工作。
  • 如果您想在 Python 中调用一些函数,并且希望在 C/C++ 中完成其余的工作,请使用 Python C 扩展。

使用这两个选项,您可以在 C++ 和 Python 之间传输大量内存,而不必涉及任何磁盘读/写操作。

希望这会有所帮助。

【讨论】:

  • 是的,它有帮助。谢谢你,顺便说一句很棒的尼克。
  • @cukier9a7b5 很高兴它有帮助。顺便说一句,有许多包装器可以更轻松地使用 C 扩展,例如 Boost 和 SWIG。也考虑这些。我现在只记得他们。干杯!
猜你喜欢
  • 2021-12-18
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多