使用python扩展C ++应用程序

时间:2016-09-30 21:07:39

标签: python c++ extending python-embedding

我有一个用C ++编写的遗留(但仍在内部维护)应用程序,它处理一些硬件,与数据库交互,通过串行线路或套接字接收命令......简而言之,它做了大量的工作。

此应用程序在Linux(ARM / Buildroot)下运行。

现在需要改进控制界面,添加RESTful API。

我正在探索通过Python扩展来实现这一目的的可能性。

注意我是一名C ++ / java程序员,我并不擅长Python,但我知道基础知识。

一般的想法是:

  • 在C ++应用程序中启动Python解释器作为线程。
  • 使用Flask / jinja2(或只是普通的Bottle)来处理传入的RESTful请求。
  • 向Python公开一些(可能只是一个)C ++类。
  • 从Python调用适当的C ++方法来执行所需的操作。

我研究了官方文档(主要涉及普通C)和几种替代方案,包括:

问题是:

  • 这有什么意义吗?
  • 实现这一目标的最少侵入方式(如果有的话)是什么?
  • 建议使用哪个lib / framework?
  • 是否有一些这方面的教程项目?

我知道这个问题相当广泛,但我希望一旦第一条评论指向正确的方向,我就会缩小范围。

1 个答案:

答案 0 :(得分:0)

你可以反过来这样做 - 将你的C ++代码嵌入Python程序中吗?这样就可以像你说的那样为移动现有功能Python做好准备。

Python使许多事情变得更容易(开发更快,更易于维护) - 与数据库,库(如果他们有Python包装器)的通信,进程/线程管理......在C ++中保留需要的东西在C ++中,就像处理硬件一样,C / C ++ - 只有库,CPU代码很重。

看看Cython是否在Python中嵌入C ++。 Cython基本上是一个从类似Python的语言到.c / .cpp文件的编译器,它只是“调用”Python C API,所以它可以从“普通”Python代码中使用,但也可以调用其他C / C ++代码。

替代方法:在C ++应用程序中实现API,并创建一个使用此API的单独Python应用程序。通过API我不是指REST API,而是更低级的东西 - RPC,ZeroMQ,普通套接字......