在长时间运行的c进程和python之间进行双向IPC的最佳方法是什么?

时间:2012-06-29 13:48:10

标签: python c ipc protocol-buffers thrift

我有一个现有的C进程,可以接受一个文本输入并生成一个图像文件。 由于它与外部系统的接口,这个C过程具有很高的设置/拆卸成本。 一旦设置/拆卸发生,文本中图像的实际生成几乎是即时的。

我的计划是守护进程,因此它将在无限循环中接收文本并生成图像文件,同时保持与外部系统的连接。

我还将在python中编写一个小型客户端程序,它将与守护进程交互以发送文本/接收图像。

目标操作系统是unix。

问题是,在这种情况下,在python / C之间进行双向IPC的最佳方法是什么? 我应该只打开一个unix域套接字并来回发送打包的结构,还是应该看看像Apache Thrift或protobuf这样的东西?

更新:

只是保持简单,并打开一个unix域套接字

2 个答案:

答案 0 :(得分:4)

套接字是我想到的方式。在Unix上,我建议使用AF_UNIX套接字(参见unix(7)联机帮助页)。这些很容易在C ++和python(sockets模块)中创建。这可以避免端口冲突或本地系统上打开端口的权限问题。

Unix套接字执行得相当好,如果您决定与远程工作人员合作,可以轻松地交换AF_INET6个套接字。

对于打包/解包数据,使用compiled Struct objectsstruct模块对我来说似乎是合理的。多数民众赞成在过去我是如何做到的,表现非常好(没有进行任何测量,因为这对我来说太好了调查)。

答案 1 :(得分:1)

我的默认选择是使用通过localhost进行通信的普通套接字。套接字是一种易于理解的语言和平台中立的API,往往表现得非常好。它们的优点是不会将您绑定到同一个盒子上的两个进程,这在许多情况下都是有利的。