2016-02-26 102 views
5

我有2个代码库,一个在python中,一个在C++中。我想在他们之间分享实时数据。我想评价哪些选项最适合我的具体使用情况:在Python代码和C++代码之间共享信息(IPC)

  • 许多小数据从C++程序的Python程序
  • 更新他们在同一台机器上都运行
  • 可靠性是非常重要的
  • 低延迟是好的,有

我可以看到几个选项:

  • 一个进程写入一个平面文件,另一个进程读取它。它不可扩展,速度慢,I/O容易出错。
  • 一个进程写入数据库,另一个进程读取它。这使得它更具可扩展性,稍微不易出错,但仍然非常慢。
  • 将我的Python程序嵌入到C++中或其他方式。我拒绝了这个解决方案,因为两个代码库都相当复杂,为了维护性的原因,我最好让它们保持分离。
  • 我在两个程序中都使用了一些套接字,并直接发送消息。这似乎是一种合理的方法,但并没有利用它们在同一台机器上的事实(它将通过使用本地主机作为目的地而略微优化,但仍然感到麻烦)。
  • 使用共享内存。到目前为止,我认为这是我找到的最令人满意的解决方案,但缺点是实施稍微复杂一些。

还有没有其他的解决方案,我应该考虑?

+0

直接使用C++/Python中的Python/C++代码? –

+0

RESTful API应该对你最有帮助,完美的独立语言api – AlokThakur

+0

@Revolver_Ocelot,我拥有2个代码库,所以是的,我可以直接在每个代码中使用代码。 – DevShark

回答

1

首先,这个问题是非常基于意见的!

最干净的方法是在同一个进程使用他们,并让他们直接沟通。唯一的复杂性是实现适当的API和C++ - > Python调用。缺点是你记下的可维护性和潜在的较低健壮性(两者一起崩溃,在大多数情况下不是问题)和较低的灵活性(你确定你永远不需要在不同的机器上运行它们)。可扩展性是最好的,因为添加更多通信或更改现有非常简单。您可以重新考虑可维护性点。你可以用Python的应用程序不使用C++对应?如果没有,我不会担心可维护性这么多。

然后共享内存是具有更好的可维护性但其他缺点相同的下一个选择。可扩展性稍微差一些,但还不算太糟糕。它可能很复杂,我不知道Python支持共享内存操作,对于C++你可以看看Boost.Interprocess。我首先要检查的主要问题是进程之间的同步。

然后,网络通信。这里有很多选择,从套接字级别实现的最简单的二进制协议到评论中提到的更高级别的选项。这取决于你的C++ < - > Python通信是多么复杂,并且可以在未来。这种方法实施起来可能更复杂,可能需要第三方库,但一旦完成,它就具有可扩展性和灵活性。通常第三方库基于代码生成(Thrift,Protobuf),不会简化构建过程。

我不会认真考虑这种情况下的文件系统或数据库。

+0

在这种情况下,“适当的API”是什么?我不明白。他们是不同的应用程序 – Andrey

+0

我的意思是你想从C++端调用的API,它可以是任何你需要的,但更好的是把它保存在一个地方,像façade模式(https://en.wikipedia.org/wiki/ Facade_pattern),用于无痛维护。无论您选择什么选项,这样的API都可以。 –