一个Python和C ++应用程序简单但快速的IPC方法?

我有一个使用Python和C ++代码的GNU Radio应用程序。 我希望能够发出一个事件的C ++代码。 如果它们在相同的范围内,我通常会使用一个简单的布尔值,但是代码是独立的,需要某种forms的共享内存。 所涉及的代码对性能至关重要,因此需要一种有效的方法。

我最初想的是可以通过Python和C ++访问的共享内存段。 因此,我可以在Python代码中设置一个标志,并从C ++中检查它。 由于我只需要一个简单的标志来暂停C ++代码,信号量就足够了吗?

要清楚,我需要从Python设置一个标志,C ++代码将简单地检查这个标志,如果它设置进入一个繁忙的循环。

那么试图在Python / C ++之间实现共享内存段是一个合理的方法吗? 信号量怎么样? 在Linux上,这更容易实现?

谢谢!

Solutions Collecting From Web of "一个Python和C ++应用程序简单但快速的IPC方法?"

假设这是在一台机器上的两个单独的应用程序,你需要体面的实时性能,你不想用套接字去。 我会在共享内存中使用一个标志,并可能使用一个信号来确保两个程序不能一次访问该标志。 该库提供对Python的信号量和共享内存的访问,并且支持Python版本2.4-3.1(不是3.0): http ://semanchuk.com/philip/posix_ipc

编辑:改变建议使用信号量保护共享内存中的标志

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

如果Boost是一个选项,你可以使用Boost.Python和Boost.Interprocess 。 Boost.Python为Python和C ++对象提供了一种交互方式,Boost.Interprocess为跨进程边界的共享内存或同步原语提供了大量选项。

DBus看起来很有前途。 它支持信号,所以你应该能够按需停止应用程序。 但是,我不确定它的性能是否足够。

您可以尝试使用自定义信号。 我不知道可以发送自定义信号的Python代码,但是您的C / C ++可以使用SIGIO定义自定义信号。

如果你有严格的响应时间的要求,你可能需要超越你的应用程序代码,并进入操作系统的一段时间,支持实时信号(rt-linux,muOs等)