如何从python中调用C或C ++?

时间:2015-12-15 08:39:36

标签: python c++ c language-binding

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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