2

关于“如何”从 Python 调用 C C++ 代码存在多个问题。但我想了解完成此操作后究竟会发生什么以及性能问题是什么。下面的理论是什么?我希望通过理解原理得到回答的一些问题是:

当考虑正在处理的数据(尤其是大数据)(例如 2GB)时,需要从 python 传递到 C/C++ 然后再返回。调用函数时如何将数据从 python 传输到 C?函数结束后结果如何传回?一切都是在内存中完成的,还是用于传输数据的 UNIX/TCP 套接字或文件?是否完成了一些翻译和复制(例如转换数据类型),我是否需要 2GB 内存来保存 python 中的数据和额外的 +-2GB 内存才能将 C 版本的数据传递给 C 函数?C 代码和 Python 代码是否在不同的进程中运行?

4

1 回答 1

2

您可以在 C、C++、Python 和一堆其他语言之间调用,而无需生成单独的进程或复制任何内容。

在 Python 中,基本上所有内容都是引用计数的,因此如果您想在 C++ 中使用 Python 对象,您可以简单地使用相同的引用计数来管理其生命周期(例如,即使 Python 决定不再需要该对象,也可以避免复制它)。如果你想要反过来,你可能需要使用 C++std::shared_ptr或类似的东西来将你的对象保存在 C++ 中,以便 Python 也可以引用它们。

在某些情况下,事情甚至比这更简单,例如,如果您有一个 C 或 C++ 中的纯函数,它从 Python 获取一些值并返回没有副作用且不存储输入的结果。在这种情况下,您当然不需要复制任何内容,因为您可以直接读取 Python 值,并且 Python 解释器不会在您的 C 或 C++ 代码运行时运行(因为它们都在一个线程中)。

为此有一个广泛的 Python(顺便说一下,还有 NumPy)C API,以及用于 C++ 集成的优秀 Boost.Python,包括智能指针。

于 2015-12-15T08:45:33.210 回答