C++和Python之间的数据传递

7
我希望分享在C++和Python之间共享内存的解决方案。
我的问题:
1. 我正在使用C++处理大量数据集(高达6 GB RAM)。 所有的计算都是在C++中完成的。 2. 然后,我想将所有结果“粘贴”到Python程序中。 但我只能将我的数据写入磁盘,然后从Python读取该文件,这并不高效。
是否有一种方法可以“映射”对应于C++变量的内存,以便可以从Python访问数据? 我不想复制6GB的数据到硬盘上。

1
你可能想要在Google/Bing上搜索“进程间通信”(IPC); 你可能想要查看这个Stackoverflow帖子:https://dev59.com/Smw05IYBdhLWcg3w9mnd - WhiZTiM
根据你在C++中的代码库大小,使用类似Cython这样的工具可能是个好主意。 - Bendik
@Bendik 大约有7千行的C++代码,而且还在不断增长。目前我正在考虑通过内存地址用Python读取数据。 - PatrykB
2
你可能想在你的C++程序中嵌入Python解释器,这将允许你使用Python API使Python代码可以访问它的数据。 - spectras
@ spectras 谢谢。我认为这是迄今为止最好的想法。 - PatrykB
显示剩余3条评论
1个回答

4
第一种方法:我认为您更适合选择ctypes。您可以创建一个共享库,然后在Python中加载共享库的函数,并在Python中填充所有需要的数据容器。

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

这样做的好处是它不会受到您所使用Python版本的影响。

第二种方法:我认为这种方法不太适合,但也可以让它工作,那就是Python C扩展。借助它,您可以在C中调用Python数据容器(PyObject),并在其中填充数据。

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

该如何选择?
  • 如果您想要调用一些C/C++中的函数,然后在Python中完成其他操作,请使用ctypes。
  • 如果您想要调用一些Python中的函数,并希望在C/C++中完成其他操作,请使用Python C Extension。

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

希望这可以帮到您。


是的,它有帮助。谢谢,顺便说一句,昵称很棒。 - PatrykB
@cukier9a7b5 很高兴能帮上忙。顺便说一下,有许多包装器可以使使用 C 扩展更容易,比如 Boost 和 SWIG。也考虑一下它们。现在我只是想起来了。干杯! - The Quantum Physicist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接