2016-09-30 15 views
0

일부 하드웨어를 처리하고 데이터베이스와 상호 작용하며 직렬 회선이나 소켓을 통해 명령을받는 C++로 작성된 레거시 (그러나 내부적으로 유지 관리되는) 응용 프로그램이 있습니다 ... 간단히 말해서 사소한 일을합니다. 일의 양.파이썬으로 C++ 응용 프로그램 확장

이 응용 프로그램은 Linux (ARM/Buildroot)에서 실행됩니다.

이제 제어 인터페이스를 개선하여 RESTful API를 추가해야합니다.

나는 파이썬 확장을 통해 그렇게 할 수있는 가능성을 모색 중이다.

참고 저는 C++/java 프로그래머이며 파이썬에 능숙하지는 않지만 기본을 알고 있습니다.

일반 아이디어는 다음과 같습니다

  • 는 C++ 응용 프로그램에서 스레드로 파이썬 인터프리터를 시작합니다.
  • 들어오는 RESTful 요청을 처리하려면 Flask/jinja2 (또는 일반 Bottle)를 사용하십시오.
  • Python에 C++ 클래스 몇 개를 노출합니다.
  • Python에서 필요한 액션을 수행하기위한 적절한 C++ 메소드를 호출하십시오. (우리의 하드웨어 너무 무거운 가능)에서만 관심을 보인다
  • pybind11을 (

    • Boost.Python :

  • 나는 공식 문서 (주로 일반 C 관한)과 몇 가지 대안을 포함하여 연구 파이썬 확장, 삽입하지 않음).
  • http://www.codeproject.com/Articles/11805/Embedding-Python-in-C-C-Part-I (파이썬에 C++ 클래스에 대한 액세스 권한을 부여하지 않고 임베딩 만 다룹니다).

질문은 다음과 같습니다

  • 이 어떤 의미가 있습니까?
  • 이 작업을 수행하는 데 방해가되는 최소한의 방법은 무엇입니까?
  • lib/framework에서 사용하는 것이 좋습니다?
  • 이 줄을 따라 튜토리얼 프로젝트가 있습니까?

나는 꽤 광범위한 질문을 알고 있지만 첫 번째 의견이 나를 올바른 방향으로 가르쳐 주 자마자 범위를 좁히기를 희망합니다.

+0

REST API를 응용 프로그램에 임베드 할 필요가 있습니까? 소켓 기반 제어 인터페이스가 이미있는 경우 REST API에서이를 사용하지 않고 독립 실행 형 응용 프로그램으로 사용하는 것이 어떻습니까? –

+0

@ DanMašek : 현재 제어 인터페이스는 매우 제한되어 있으며 수동으로 수행해야하는 데이터베이스 설정은 다루지 않습니다. 또한보고 기능은 다소 제한적입니다. 필자는 Python에서 직접 데이터베이스 액세스 기능을 구현하고 기능 쿼리에 대한보다 나은 응답을 제공 할 계획입니다. 기본적으로 우리는 현존하는 응용 프로그램을 그대로 유지하면서 파이썬에서 주로 새로운 기능을 추가 할 가능성을 모색하고 있습니다. 추가 개발은 기존 기능을 C++에서 Python으로 이동하고 레거시 인터페이스를 삭제하는 것입니다 (먼 미래!). – ZioByte

답변

0

다른 방법으로 할 수 있습니까? C++ 코드를 파이썬 프로그램에 포함시킬 수 있습니까? 이렇게하면 기존 기능을 Python으로 옮길 준비가 된 것입니다.

파이썬은 데이터베이스, 라이브러리 (파이썬 래퍼가있는 경우), 프로세스/스레드 관리 등과의 통신을보다 쉽고 (개발이 쉽고, 유지 보수가 더 쉽다.) 필요로하는 것들을 C++로 유지한다. C++, 하드웨어, C/C++ 전용 라이브러리, CPU 무거운 코드 다루기.

파이썬에서 C++를 임베드하기 위해 Cython을 살펴보십시오. Cython은 기본적으로 파이썬과 같은 언어에서 .c /에 이르는 컴파일러입니다.cpp 파일은 Python C API를 "그냥"호출하므로 "일반"Python 코드에서 사용할 수 있지만 다른 C/C++ 코드를 호출 할 수도 있습니다.

대체 : C++ 응용 프로그램에서 API를 구현하고이 API를 사용하는 별도의 Python 응용 프로그램을 만듭니다. API에 의해 나는 REST API를 의미하지는 않지만 더 낮은 수준의 RPC, ZeroMQ, plain 소켓을 의미하지는 않습니다 ...