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

Lee*_*eil 33 c++ python cross-platform ipc

我有一个在后台运行的C++进程,它将不经常生成'事件',以便在同一个盒子上运行的Python进程需要获取.

  • C端的代码需要尽可能轻量级.
  • Python端是只读的.
  • 实施必须是跨平台的.
  • 发送的数据非常简单.

我有什么选择?

谢谢

Has*_*yed 45

zeromq - 没有别的.将消息编码为字符串.

但是,如果要从库中获取序列化,请使用protobuf,它将为Python和C++生成类.您在任一端使用SerializeToString()和ParseFromString()函数,然后通过ZeroMq管道字符串.

问题解决了,因为我怀疑任何其他解决方案都更快,任何其他解决方案都不会像接线和简单易懂那样容易.

如果想为rpc使用特定的系统原语,例如Windows上的命名管道和unix上的Unix域套接字,那么你应该看一下Boost :: ASIO.但是,除非你有(a)网络背景,并且(b)非常好地理解C++,否则这将是非常耗时的

  • 多个选项+1.并指出`protobuf`只是序列化方面的解决方案. (3认同)
  • 我选择了zeromq,因为服务器端实现了12行代码!我不喜欢接受依赖,如果我不必,但zeromq是例外.:) (3认同)

jte*_*ace 5

Google的protobuf是一个很棒的程序库之间的RPC库.它为PythonC++生成绑定.

如果您需要分布式消息传递系统,您还可以使用RabbitMQ,zeromqActiveMQ之类的东西.有关消息队列库的讨论,请参阅此问题.

  • OP没有说明是否需要"火箭筒",所以我提出了我认为最受欢迎的那个.我编辑了我的答案,包括zeromq和ActiveMQ,并指出了另一个关于该主题的SO问题. (2认同)
  • 我认为“protobuf”只是一个用于消息本身便携式传输的序列化库。它似乎没有提供任何RPC调用和IPC的机制。 (2认同)

zee*_*kay 5

使用zeromq,它尽可能地简单。