我们仍处于项目的设计阶段,但我们正在考虑在嵌入式Linux内核上有三个独立的进程.其中一个过程是通信模块,它通过各种介质处理与设备之间的所有通信.
其他两个进程需要能够通过通信过程发送/接收消息.我正在尝试评估Linux提供的IPC技术; 其他进程将发送的消息大小各不相同,从调试日志到流媒体,速率约为5 Mbit.此外,媒体可以同时流入和流出.
您对此应用建议使用哪种IPC技术? http://en.wikipedia.org/wiki/Inter-process_communication
处理器运行大约400-500 Mhz,如果这改变了什么.不需要跨平台,只有Linux才行.需要使用C或C++实现.
有没有一种很好的方法可以在不使用磁盘的情况下在两个python子进程之间传递大量数据?这是我希望完成的动画示例:
import sys, subprocess, numpy
cmdString = """
import sys, numpy
done = False
while not done:
cmd = raw_input()
if cmd == 'done':
done = True
elif cmd == 'data':
##Fake data. In real life, get data from hardware.
data = numpy.zeros(1000000, dtype=numpy.uint8)
data.dump('data.pkl')
sys.stdout.write('data.pkl' + '\\n')
sys.stdout.flush()"""
proc = subprocess.Popen( #python vs. pythonw on Windows?
[sys.executable, '-c %s'%cmdString],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
for i in range(3):
proc.stdin.write('data\n')
print proc.stdout.readline().rstrip()
a = numpy.load('data.pkl')
print a.shape
proc.stdin.write('done\n')
Run Code Online (Sandbox Code Playgroud)
这将创建一个子进程,该子进程生成numpy数组并将数组保存到磁盘.然后父进程从磁盘加载数组.有用!
问题是,我们的硬件可以生成比磁盘可读/写快10倍的数据.有没有办法将数据从一个python进程传输到另一个纯内存中,甚至可能没有复制数据?我可以做一些像传递参考的东西吗?
我第一次尝试纯粹在内存中传输数据是非常糟糕的:
import …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Java和C++应用程序之间的IPC共享内存,但寻找更方便的替代方案.
有人可以建议一个性能和速度相同的更好的方法吗?
谢谢!
我有两个进程A和B. A和B有时需要进行通信(双向)以传递信号,消息等.
我已经对Linux中可用的IPC进行了一些基础研究,如信号量,消息队列,dbus等.
现在我是在决定使用哪一个时很困惑,谁能告诉我哪个IPC更适合我的应用?
提前致谢
编辑:阐述应用程序.(这是一个嵌入式应用程序)
过程A将监控温度,速度计算等.过程B将驱动电机,读取传感器值(数字)等.有时我需要将信号发送到过程B告知达到最高温度,所以停止驱动电机.有时需要将从流程A中的传感器读取的数据发送到流程B.像这样,需要在流程中传递数字数据.我在ARM架构中这样做.
问题:我有一个可以在另一个程序中加载的DLL.现在,dll可以访问其他程序中的所有数据/功能.
现在外部程序可以向该dll发送数据/命令,引导其他程序或从中获取数据,我可以使用哪种技术?
我的意思是,在过去,这意味着DDE,我认为这是在Windows 3.11/95次.我今天可以用什么?哪一个最容易?哪一个最快?
我之前从未在Linux上编写任何IPC C++.
我的问题是我将拥有多个客户端(编写器)和一个服务器(读取器).所有这些都将在同一台机器上.作者将向读者提供数据块(字符串/结构).然后读者将在FIFO中读取它们并对它们执行某些操作.
据我所知,Linux上的IPC类型是管道或套接字/消息队列.
我只是想知道是否有人可以推荐我走下去的路.我倾向于插座,但我没有真正的基础.在踏上这段旅程之前,有什么我应该阅读/理解的吗?
谢谢