如何在C和Python之间处理IPC?

我有一个带有两个进程的应用程序,一个在C中,一个在Python中。 C进程是完成所有繁重工作的地方,而Python进程则处理用户界面。

C程序每秒写入4次大型缓冲区,Python进程读取此数据。 到目前为止,AMQP已经完成了与Python进程的通信。 我更愿意在两个进程之间设置一些内存共享,以减少开销并提高性能。

我有什么选择? 理想情况下,我只是简单地让Python进程直接读取物理内存(最好是从内存中读取而不是从磁盘中读取),然后使用信号量或类似的东西来处理竞争条件。 然而,这是我没什么经验的东西,所以我很感激我能得到的任何帮助。

我正在使用Linux btw。

建议#1:最简单的方法应该是使用TCP。 你提到你的数据量很大。 除非您的数据量太大,否则使用TCP应该没问题。 确保在C和Python中创建单独的线程,以便通过TCP传输/接收数据。

建议#2: Python支持C语言包装。一个流行的包装器是ctypeshttp://docs.python.org/2/library/ctypes.html

假设您通过共享内存熟悉两个C程序之间的IPC,您可以为您的python程序编写一个C-wrapper,它从共享内存中读取数据。

另请参阅下面的讨论,讨论python和C ++ 之间的IPC : C ++和Python之间的简单IPC(跨平台)

如何将权重代码编写为C中的库,然后提供Python模块作为它的包装? 这实际上是一种非常常见的方法,特别是它允许在Python中进行原型设计和分析,然后将性能关键部分移动到C.

如果你真的有理由需要两个进程,那么Python中有一个XMLRPC包可以促进这样的IPC任务。 在任何情况下,使用现有框架而不是发明自己的IPC,除非您能够真正certificate性能需要它。