2016-09-30 112 views
0

我有一個用C++編寫的遺留(但仍然是內部維護的)應用程序,它處理一些硬件,與數據庫交互,通過串行線路或套接字接收命令...總之,它不重要工作量。使用python擴展C++應用程序

此應用程序在Linux(ARM/Buildroot)下運行。

現在需要修改添加RESTful API的控件界面。

我正在探索通過Python擴展來做到這一點的可能性。

注意我是一名C++/java程序員,我不擅長Python,但我知道基礎知識。

總體思路是:

  • 啓動Python解釋器作爲C++應用程序的線程。
  • 使用Flask/jinja2(或者簡單的Bottle)來處理傳入的RESTful請求。
  • 向Python展示一些(可能只是一個)C++類。
  • 從Python調用相應的C++方法來執行所需的操作。

我學的官方文檔(主要是關於純C)和幾個備選方案,其中包括:

問題是:

  • 這是否任何意義?
  • 什麼是實現這一目標的最不具侵入性的方式(如果有的話)?
  • 哪些lib/framework被建議使用?
  • 是否有一些教程項目沿着這些線?

我知道這個問題相當廣泛,但我希望只要第一條評論指向正確的方向就可以縮小它。

+0

真的需要在應用程序中嵌入REST API嗎?如果你已經有了基於套接字的控制接口,爲什麼不讓REST API使用它(並且作爲一個獨立的應用程序)? –

+0

@DanMašek:當前的控制界面非常有限,不包括數據庫設置,必須手動完成。報告功能也相當有限。我打算直接在Python中實現一些數據庫訪問設施,併爲功能查詢提供更好的響應。基本上我們正在探索進一步增強當前應用程序的可能性,以保持現有的(或多或少)並增加主要在Python中的新功能。進一步的開發將是將現有的功能從C++移植到Python並放棄傳統接口(遠景!)。 – ZioByte

回答

0

你能否以相反的方式實現它 - 在Python程序中嵌入C++代碼?通過這種方式,它可以像您所說的那樣爲現有的Python功能做更多的準備。 (使用Python包裝器),進程/線程管理等進行通信......保持C++只是需要的東西在C++中,就像處理硬件,C/C++ - 只有庫,CPU重的代碼一樣。

看看Cython用於在Python中嵌入C++。 Cython基本上是一種從類Python語言到.c /的編譯器。「just」調用Python C API的cpp文件,所以它可以從「普通」Python代碼中使用,但也可以調用其他C/C++代碼。

備選方案:在C++應用程序中實現API並創建一個使用此API的單獨Python應用程序。通過API我不是指REST API,而是更低級的東西 - RPC,ZeroMQ,普通套接字...

相關問題