Расширение приложения C ++ с помощью Python

У меня есть старое (но все еще поддерживаемое внутри) приложение, написанное на C ++, которое обрабатывает некоторое оборудование, взаимодействует с базами данных, получает команды через последовательную линию или сокет … короче говоря, оно выполняет нетривиальный объем работы.

Это приложение работает под Linux (ARM / Buildroot).

Теперь необходимо обновить интерфейс управления, добавив RESTful API.

Я изучаю возможность сделать это через расширение Python.

Обратите внимание, что я программист на C ++ / Java и не очень хорошо разбираюсь в Python, но знаю основы.

Общая идея будет:

  • Запустите интерпретатор Python как поток в приложении C ++.
  • Используйте Flask / jinja2 (или просто бутылку) для обработки входящих запросов RESTful.
  • Предоставьте Python несколько (возможно, только один) класс C ++.
  • Вызовите из Python соответствующие методы C ++ для выполнения необходимых действий.

Я изучил официальную документацию (в основном относящуюся к простой C) и несколько альтернатив, в том числе:

  • Boost.Python (возможно, слишком тяжелый для нашего ограниченного оборудования)
  • pybind11 (похоже, обеспокоен только расширением Python, а не его внедрением).
  • http://www.codeproject.com/Articles/11805/Embedding-Python-in-C-C-Part-I (касается только встраивания, без предоставления Python доступа к классам C ++).

Вопрос:

  • Есть ли в этом смысл?
  • Каков наименьший способ (если таковой имеется) для достижения этой цели?
  • какой lib / framework рекомендуется использовать?
  • Есть ли какой-то учебный проект по этим направлениям?

Я знаю, что вопрос довольно широкий, но я надеюсь сузить его, как только первые комментарии укажут мне правильное направление.

0

Решение

Можете ли вы сделать это наоборот — встроить свой код C ++ в программу Python? Таким образом, он будет более подготовлен к переносу существующей функциональности Python, как вы сказали.

Python делает многое проще (быстрее разрабатывать, легче поддерживать) — взаимодействие с базами данных, библиотеками (если у них есть обертки Python), управление процессами / потоками … Сохранение в C ++ только того, что должно быть в C ++, как работа с аппаратным обеспечением, C / C ++ — только библиотеки, загруженный ЦП код.

Посмотри на Cython для встраивания C ++ в Python. По сути, Cython — это компилятор из языка, похожего на Python, в файл .c / .cpp, который «просто» вызывает API-интерфейс Python C, поэтому его можно использовать из «обычного» кода Python, но он также может вызывать другой код C / C ++.

Альтернатива: Реализуйте API в приложении C ++ и создайте отдельное приложение Python, которое использует этот API. Под API я имею в виду не REST API, а что-то более низкое — RPC, ZeroMQ, простые сокеты …

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector