【问题标题】:Extending a C++ application with python使用 python 扩展 C++ 应用程序
【发布时间】:2016-09-30 21:07:39
【问题描述】:

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

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

现在需要改进控制接口,添加一个 RESTful API。

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

请注意,我是一名 C++/java 程序员,我并不真正精通 Python,但我知道基础知识。

一般的想法是:

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

我研究了官方文档(主要是关于纯 C 的)和几个替代方案,包括:

问题是:

  • 这有意义吗?
  • 实现此目的的侵入性最小的方式(如果有)是什么?
  • 建议使用哪个库/框架?
  • 是否有一些类似的教程项目?

我知道这个问题很宽泛,但我希望在第一批 cmets 指出我正确的方向后尽快缩小范围。

【问题讨论】:

  • 真的需要在应用程序中嵌入 REST API 吗?如果您已经拥有基于套接字的控制接口,为什么不让 REST API 使用它(并作为一个独立的应用程序)?
  • @DanMašek:当前的控制界面非常有限,不包括数据库设置,必须手动完成。报告能力也相当有限。我计划直接在 Python 中实现一些数据库访问工具,并更好地响应功能查询。基本上,我们正在探索进一步增强当前应用程序的可能性,以保持现有的(或多或少)原样并主要在 Python 中添加新功能。进一步的发展是将现有功能从 C++ 转移到 Python 并丢弃遗留接口(遥远的未来!)。

标签: python c++ extending python-embedding


【解决方案1】:

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

Python 让很多事情变得更容易(开发更快,更容易维护)——与数据库、库的通信(如果他们有 Python 包装器的话)、进程/线程管理......在 C++ 中只保留需要的东西在 C++ 中,例如处理硬件、仅限 C/C++ 的库、占用大量 CPU 的代码。

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

替代方案:在 C++ 应用程序中实现一个 API,并创建一个使用该 API 的单独 Python 应用程序。 API 我不是指 REST API,而是更底层的东西——RPC、ZeroMQ、普通套接字……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2016-07-19
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多