适用于Python和C++应用的简单快速IPC方法?

13 投票
5 回答
16673 浏览
提问于 2025-04-16 16:14

我有一个使用GNU Radio的应用程序,里面同时用到了Python和C++代码。我想要在C++代码中发出一个事件信号。如果这两个代码在同一个范围内,我通常会用一个简单的布尔值来处理,但现在它们分开得很远,所以需要某种共享内存。因为这段代码对性能要求很高,所以需要一个高效的方法。

我最开始考虑的是创建一个共享内存区域,让Python和C++都能访问。这样我就可以在Python代码中设置一个标志,然后在C++中检查这个标志。因为我只需要一个简单的标志来暂停C++代码,使用信号量可以行得通吗?

为了更清楚,我需要在Python中设置一个标志,而C++代码只需检查这个标志,如果被设置了,就进入一个忙碌的循环。

那么,在Python和C++之间实现共享内存是否是一个合理的方案?使用信号量怎么样?在Linux上,哪个实现起来更简单呢?

谢谢!

5 个回答

3

如果你可以使用Boost这个库,你可以试试 Boost.PythonBoost.Interprocess。Boost.Python让Python和C++的对象可以互相交流,而Boost.Interprocess则提供了很多关于共享内存或者进程间同步的选项。

5

为什么不打开一个Unix套接字?或者使用DBus呢?

12

假设你在一台机器上运行两个不同的应用程序,并且你需要它们之间有不错的实时性能,那么使用套接字(sockets)就不太合适了。我建议你使用共享内存中的一个标志,并可能使用一个信号量(semaphore)来确保两个程序不会同时访问这个标志。这个库可以让你在Python中使用信号量和共享内存,支持的Python版本是2.4到3.1(不包括3.0):http://semanchuk.com/philip/posix_ipc

编辑:我把建议改成使用信号量来保护共享内存中的标志。

撰写回答