C和x2B之间的简单IPC+;和Python(跨平台) 我有一个C++进程,在后台运行,它会频繁地生成一个Python进程,它需要在同一个方框上运行。 C端的代码需要尽可能轻量级 Python端是只读的 实现必须是跨平台的 发送的数据非常简单

C和x2B之间的简单IPC+;和Python(跨平台) 我有一个C++进程,在后台运行,它会频繁地生成一个Python进程,它需要在同一个方框上运行。 C端的代码需要尽可能轻量级 Python端是只读的 实现必须是跨平台的 发送的数据非常简单,c++,python,cross-platform,ipc,C++,Python,Cross Platform,Ipc,我有什么选择 谢谢您的数据有多复杂?如果它很简单,我会将其序列化为字符串。如果它比较复杂,我会使用JSON。TCP是一种良好的跨平台IPC传输。因为你说这种IPC很少见,所以性能不是很重要,TCP+JSON也很好。Google的是一个很好的程序间RPC库。它为和生成绑定 如果您需要一个分布式消息传递系统,您也可以使用,或。有关消息队列库的讨论,请参阅。使用,它尽可能简单。另一种选择是使用模块从Python代码中调用C代码,而不是单独运行这两个程序。--除此之外没有其他选择。将消息编码为字符串 但

我有什么选择


谢谢

您的数据有多复杂?如果它很简单,我会将其序列化为字符串。如果它比较复杂,我会使用JSON。TCP是一种良好的跨平台IPC传输。因为你说这种IPC很少见,所以性能不是很重要,TCP+JSON也很好。

Google的是一个很好的程序间RPC库。它为和生成绑定


如果您需要一个分布式消息传递系统,您也可以使用,或。有关消息队列库的讨论,请参阅。

使用,它尽可能简单。

另一种选择是使用模块从Python代码中调用C代码,而不是单独运行这两个程序。

--除此之外没有其他选择。将消息编码为字符串

但是,如果希望从库中获得序列化,它将为Python和C++生成类。在任意一端使用SerializeToString()和ParseFromString()函数,然后通过ZeroMq对字符串进行管道传输

问题解决了,因为我怀疑任何其他解决方案都会更快,而且任何其他解决方案都不会那么容易连接和理解


如果您希望为rpc使用特定的系统原语,例如Windows上的命名管道和Unix上的Unix域套接字,那么您应该查看。但是,除非你有一个网络背景,和(b)对C++有很好的理解,否则这将是非常耗时的。

< p>我会说你创建一个DLL,管理两个之间的通信。python将加载DLL并调用getData()之类的方法,DLL将依次与进程通信并获取数据。 这应该不难。 您还可以使用XML文件、SQLite数据库或任何数据库来查询数据。守护进程将更新DB,Python将继续查询。可能有一个字段用于指示数据库中的数据是否已由守护进程更新,然后Python将进行查询。
当然,这取决于性能和准确性因素

你可以用谷歌来做这个

你的程序运行在什么操作系统下?基于管道的IPC很容易在类似Unix的机器上实现。“C端”是一个拼写错误,对吗?RabbitMq与ZeroMq相比是一个火箭筒,ZeroMq是一个苍蝇拍;)这篇文章没有具体说明是否需要“火箭筒”,所以我介绍了我认为最受欢迎的火箭筒。我编辑了我的答案,将zeromq和ActiveMQ也包括在内,并指出了关于该主题的另一个SO问题。我认为
protobuf
只是一个可移植传输消息本身的序列化库。它似乎没有为RPC调用和IPC提供任何机制。C进程是一个守护进程,一直在后台运行。很好的项目,有很好的文档。谢谢你指出这一点!看起来真的很棒。而且它看起来非常便携、灵活、快速。多个选项+1。并指出,
protobuf
只是序列化方面的一个解决方案。我选择zeromq是因为服务器端实现是12行代码!!如果不需要,我不喜欢依赖关系,但zeromq是个例外。:)是的,zeromq完全是为您的用例而设计的。它很原始,很容易理解。不过,它的原始性是健壮的,因为您可以利用它实现更复杂的消息传递结构。在我的工作中,我选择在boost:ASIO之上实现我自己的RPC系统,因为我需要上面提到的系统原语。我已经用ZeroMQ完成了这项工作,现在正在切换到其他任何东西。ZeroMQ根本没有失败的概念。如果你试图发送一条消息,而你的进程失败了,那就不可能知道了。它将继续尝试永远发送。还有许多其他问题,失败是完全不透明的,因此重试也是不可能的。@ghostbust555我已经很久没有使用zeromq了。“完全没有失败的概念”换句话说,“开火并忘记”消息没有错。如果需要,还可以在zeromq之上构建故障机制。话虽如此,这些天我可能会倾向于GRPC,但如果我没记错的话,它确实有相当大的python依赖性。因为我不想在拿起电话并送货的时候飞到日本去买寿司@斯特凡诺批评是显而易见的。。。我的反对票是非跨平台解决方案(见标签)。