我有一个有两个进程的应用程序,一个用C语言,一个用Python语言。C进程是完成所有繁重工作的地方,而Python进程处理用户界面。
C程序每秒向大的ish缓冲区写入4次,Python进程读取这些数据。到目前为止,AMQP已经完成了与Python进程的通信。我更愿意在两个进程之间设置一些内存共享,以减少开销并提高性能。
我在这里有什么选择?理想情况下,我只需要让Python进程直接读取物理内存(最好是从内存读取,而不是从磁盘读取),然后用信号量或类似的东西处理竞争条件。但这是我很少有经验的事情,所以我很感激我能得到的任何帮助。
我正在使用Linux btw
把举重代码作为一个库用C编写,然后提供一个Python模块作为包装,怎么样?这实际上是一种非常常见的方法,特别是它允许在Python中进行原型设计和分析,然后将性能关键部分转移到C
如果您真的有理由需要两个进程,那么Python中有一个XMLRPC包可以帮助完成这样的IPC任务。在任何情况下,使用现有的框架,而不是发明自己的IPC,除非您能够真正证明性能需要它。
建议1: 最简单的方法应该是使用TCP。你提到你的数据量很大。除非您的数据太大,否则您应该可以使用TCP。确保在C和Python中分别创建用于通过TCP传输/接收数据的线程。
建议2: Python支持C上的包装器。一个流行的包装器是ctypes-http://docs.python.org/2/library/ctypes.html
假设您熟悉通过共享内存在两个C程序之间使用IPC,那么您可以为python程序编写一个C-wrapper,它从共享内存中读取数据。
还检查下面的讨论,讨论Python和C++之间的IPC: Simple IPC between C++ and Python (cross platform)
这个问题问了很久了。我相信提问者已经有了答案,所以我写了这个答案给后来的人。
C程序需要先执行,不要在python代码执行之前停止它,它将创建共享内存段并向其中写入一些内容。然后Python代码附加相同的段并从中读取数据。
完成所有操作后,按enter键停止C程序并删除共享内存ID
我们可以在这里看到更多关于SharedMemory for python的信息: http://semanchuk.com/philip/sysv_ipc/#shared_memory
相关问题 更多 >
编程相关推荐