簡體   English   中英

將Python HTTP服務器作為RPC服務器嵌入到C程序中?

[英]Embed Python HTTP server into C program as RPC server?

我有一個用C ++編寫的程序,帶有用於RPC的Web界面。 我可以調用http://localhost/ListVariableshttp://localhost/RunFunction?var=1並讓C代碼執行ListVariables或RunFunction。 它可以工作,但是當那里有很多優秀的Python Web服務器時,我寧願不必以C / C ++管理Web服務器。

我在想讓C程序調用Python以在另一個線程(即Tornado)上啟動Web服務器,返回C,然后繼續進行計算。 然后,當Python服務器在http://localhost/ListVariables上收到請求時,它將回調 C並在已運行的進程上執行ListVariables。

C -----> processing -----------> processing ------------> RPC: FuncA -------->
 |                                                        ^        |
  \---> Python Web Server ---------- Request for: FuncA --/   ...   \-------->
                                     ^
  browser: http://localhost/FuncA ---/

該項目有一個不幸的警告,即程序必須從C開始。 經過一些研究后,這似乎有些微不足道,因為可以使用Cython完成Python-> C和C-> Python。 但是,在C-> Python-> C上找不到很多資源,因為我發現的大多數示例都描述了鏈接到庫而不是已經運行的進程。 是否可以讓Python回調到正在運行的C程序中?

絕對。 在注入sys.modules的C程序中創建一個“ fake”模塊 ,Python代碼可以像其他模塊一樣導入和訪問該模塊。

我個人非常喜歡boost :: python庫,用於將python嵌入到c ++中,並處理兩者之間的數據綁定和回調。 http://www.boost.org/doc/libs/1_51_0/libs/python/doc/

話雖這么說,您的建議聽起來有點像PITA。 我個人使用http://libevent.org/滿足嵌入式Web服務器的需求已經取得了很多成功。 它為您處理所有http服務器的東西,您需要做的就是給它提供您要處理的url和一個回調,將event_base_loop放入主循環中的某個位置(如果願意,也可以將其放在自己的線程中),而你走了。 在我看來,這似乎比嵌入python以及處理兩者之間傳遞的數據和數據結構要容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM