簡體   English   中英

在python代碼和c ++代碼(IPC)之間共享信息

[英]Sharing information between a python code and c++ code (IPC)

我有2個代碼庫,一個在python中,一個在c ++中。 我想在它們之間共享實時數據。 我正在嘗試評估哪個選項最適合我的特定用例:

  • 從C ++程序到python程序的許多小數據更新
  • 他們都在同一台機器上運行
  • 可靠性很重要
  • 低延遲是很好的

我可以看到幾個選項:

  • 一個進程寫入一個平面文件,另一個進程讀取它。 它不可擴展,速度慢,I / O容易出錯。
  • 一個進程寫入數據庫,另一個進程讀取它。 這使得它更具可擴展性,略微不易出錯,但仍然非常慢。
  • 將我的python程序以一種或另一種方式嵌入到C ++中。 我拒絕了這個解決方案,因為兩個代碼庫都相當復雜,出於可維護性的原因,我更喜歡將它們分開。
  • 我在兩個程序中都使用了一些套接字,並直接發送消息。 這似乎是一種合理的方法,但沒有利用它們在同一台機器上的事實(它將通過使用本地主機作為目標稍微優化,但仍然感覺很麻煩)。
  • 使用共享內存。 到目前為止,我認為這是我找到的最令人滿意的解決方案,但其缺點是實現起來稍微復雜一些。

我還應該考慮其他解決方案嗎?

首先,這個問題是基於意見的!

最干凈的方法是在同一個過程中使用它們並讓它們直接通信。 唯一的復雜性是實現適當的API和C ++ - > Python調用。 如您所述,缺點是可維護性並且可能降低穩健性(兩者一起崩潰,在大多數情況下不是問題)和較低的靈活性(您確定您永遠不需要在不同的機器上運行它們嗎?)。 可擴展性是最好的,因為添加更多通信或更改現有通信非常簡單。 您可以重新考慮可維護性點。 你可以使用沒有C ++對應的python應用程序嗎? 如果不是,我不會那么擔心可維護性。

然后共享內存是下一個具有更好可維護性但同樣缺點的選擇。 可擴展性稍差但仍然不是那么糟糕。 它可能很復雜,我不知道Python支持共享內存操作,對於C ++,你可以看看Boost.Interprocess。 我首先要檢查的主要問題是進程之間的同步。

然后,網絡通信。 這里有很多選擇,從套接字級別實現的最簡單的二進制協議到注釋中提到的更高級別的選項。 這取決於您的C ++ < - > Python通信的復雜程度。 這種方法實現起來可能更復雜,可能需要第三方庫,但一旦完成它就可以擴展和靈活。 通常,第三方庫基於代碼生成(Thrift,Protobuf),不會簡化構建過程。

對於這種情況,我不會認真考慮文件系統或數據庫。

暫無
暫無

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

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