Python调用C或C++如何工作?

2024-04-16 22:45:57 发布

您现在位置:Python中文网/ 问答频道 /正文

关于如何从Python调用C++代码有多个问题。但我想了解一下,当这项工作完成后会发生什么,以及性能方面的问题是什么。背后的理论是什么?我希望通过理解这一原则来回答一些问题:

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


Tags: 文件数据函数内存代码版本进程unix
1条回答
网友
1楼 · 发布于 2024-04-16 22:45:57

你可以在C、C++、Python和一堆其他语言之间调用,而不产生单独的进程或复制很多东西。在

在Python中,基本上所有的引用都是引用的,所以如果你想在C++中使用Python对象,你可以简单地使用相同的引用计数来管理它的生存期(例如,即使Python决定不再需要对象,也可以避免复制它)。如果你想反,你可能需要使用C++ ^ {< CD1> }或类似的方法来保存C++中的对象,以便Python也可以引用它们。在

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

这里有一个扩展的Python(顺便说一下,还有NumPy)的capi,加上优秀的Boost.Python用于C++集成,包括智能指针。在

相关问题 更多 >