C++与Python之间的简单IPC(跨平台)

47 投票
7 回答
45725 浏览
提问于 2025-04-16 22:44

我有一个在后台运行的C++程序,它会偶尔生成一些“事件”,而同一台机器上还有一个Python程序需要获取这些事件。

  • C++那边的代码需要尽量轻量级。
  • Python那边只需要读取数据,不需要修改。
  • 这个实现必须能够在不同的操作系统上运行。
  • 发送的数据非常简单。

我有哪些选择呢?

谢谢!

7 个回答

5

使用zeromq,这东西简单得不能再简单了。

5

谷歌的 protobuf 是一个很棒的库,可以让不同程序之间进行远程调用(RPC)。它可以为 PythonC++ 生成代码绑定。

如果你需要一个分布式的消息系统,可以考虑使用像 RabbitMQzeromqActiveMQ 这样的工具。想了解更多关于消息队列库的讨论,可以看看 这个问题

60

zeromq — 就只用这个。把消息编码成字符串。

不过,如果你想从一个库里获取序列化功能,可以用protobuf,它会为Python和C++生成类。你可以在两端使用SerializeToString()和ParseFromString()这两个函数,然后通过ZeroMq传输这些字符串。

问题解决了,我觉得没有其他方案能比这个更快,也没有其他方案能像这个一样简单易懂。

如果你想在RPC中使用特定的系统原语,比如在Windows上使用命名管道,或者在Unix上使用Unix域套接字,那么你可以看看Boost::ASIO。不过,除非你有(a) 网络背景和(b) 对C++非常了解,否则这会花费你很多时间。

撰写回答