繁体   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