簡體   English   中英

Python和C ++應用程序的簡單但快速的IPC方法?

[英]Simple but fast IPC method for a Python and C++ application?

我有一個GNU Radio應用程序,它使用Python和C ++代碼。 我希望能夠發出事件的C ++代碼信號。 如果它們在相同的范圍內,我通常會使用一個簡單的布爾值,但代碼與需要某種形式的共享內存的點是分開的。 有問題的代碼對性能至關重要,因此需要一種有效的方法。

我最初考慮的是Python和C ++都可以訪問的共享內存段。 因此,我可以在python代碼中設置一個標志,並從C ++中檢查它。 由於我只需要一個簡單的標志來暫停C ++代碼,信號量就足夠了嗎?

為了清楚起見,我需要從Python設置一個標志,C ++代碼將只檢查這個標志,如果設置了,則進入一個繁忙的循環。

那么嘗試在Python / C ++之間實現共享內存段是一種合理的方法嗎? 信號量怎么樣? 在Linux上,哪個更容易實現?

謝謝!

假設這是一台機器上的兩個獨立應用程序,你需要不錯的實時性能,你不想使用套接字。 我會在共享內存中使用一個標志,並且可能使用信號量來確保兩個程序不能同時訪問該標志。 該庫提供對Python的信號量和共享內存的訪問,並支持Python版本2.4-3.1(不是3.0): http ://semanchuk.com/philip/posix_ipc

編輯:更改建議使用保護共享內存中的標志的信號量

為什么不打開unix socket? 或者使用DBus

如果Boost是一個選項,您可以使用Boost.PythonBoost.Interprocess Boost.Python為Python和C ++對象提供了一種交互方式,Boost.Interprocess為跨進程邊界的共享內存或同步原語提供了大量選項。

DBus看起來很有前途。 它支持信號,因此您應該能夠按需停止應用程序。 但是,我不確定它的性能是否足夠。

您可以嘗試使用自定義信號。 我不知道Python代碼能夠發送自定義信號,但您的C / C ++當然可以使用SIGIO定義自定義信號。

如果您有嚴格的響應時間要求,您可能需要超越您的應用程序代碼並進入支持實時信號的操作系統(rt-linux,muOs等)。

暫無
暫無

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

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