如何实现 C/C++ 与 Python 的通信
若以下回答无法解决问题,邀请你更新回答
1个回答
展开全部
引入Python可以带来更好的可调式性。且如果重负载应用使用C/C++则基本没有性能损失,并可以让工程师把更多精力放在算法优化获得性能优势上。
简单讲Python与C/C++的直接交互就是两种方向:C/C++写扩展模块给Python调用;将Python嵌入C/C++。题主说的是后者。而更方便方式是前者。因为内嵌方式决定了你整个交互部分开发完成之前没法做测试。而扩展模块方式则可以先行用Python快速开发出大部分功能,有需要性能优化的部分逐步优化到C/C++。是更加渐进式的过程。
直接用最基础的方法写扩展模块略有繁杂,适合对细节的控制。题主时间紧迫则可以考虑Cython,可以在较短时间里完成些任务。但更多高级功能的玩法则限制很多。
其他交互方式还有多种,性能就不是那么高了。比如fork()子进程,用管道通信。开独立进程走mmap()交互,甚至是本机或其他机器上走socket。
最后,C++做了很多底层抽象,使得其与其他编程语言的互调用方面麻烦的要死。比较典型的包括类继承,运算符重载,引用,其他还有太多。这些特性使得其他语言调用C++时各种恶心。这不仅仅是对Python,而是对所有语言都是如此。不信试试在C程序里调用一个C++运算符重载过的方法。所以,如非必要,尽量别用C++。用C简单方便的多,而任何用以支持大规模项目的架构用Python就是了。
简单讲Python与C/C++的直接交互就是两种方向:C/C++写扩展模块给Python调用;将Python嵌入C/C++。题主说的是后者。而更方便方式是前者。因为内嵌方式决定了你整个交互部分开发完成之前没法做测试。而扩展模块方式则可以先行用Python快速开发出大部分功能,有需要性能优化的部分逐步优化到C/C++。是更加渐进式的过程。
直接用最基础的方法写扩展模块略有繁杂,适合对细节的控制。题主时间紧迫则可以考虑Cython,可以在较短时间里完成些任务。但更多高级功能的玩法则限制很多。
其他交互方式还有多种,性能就不是那么高了。比如fork()子进程,用管道通信。开独立进程走mmap()交互,甚至是本机或其他机器上走socket。
最后,C++做了很多底层抽象,使得其与其他编程语言的互调用方面麻烦的要死。比较典型的包括类继承,运算符重载,引用,其他还有太多。这些特性使得其他语言调用C++时各种恶心。这不仅仅是对Python,而是对所有语言都是如此。不信试试在C程序里调用一个C++运算符重载过的方法。所以,如非必要,尽量别用C++。用C简单方便的多,而任何用以支持大规模项目的架构用Python就是了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询