我通过UDP从微控制器获取数据。每个数据包都是一个十六进制字符串,我需要将其拆分成相等大小的块,然后再进行一些处理。然而,由于分组相对较大(每个大约700个字符),因此将一个分成块的时间大于分组到达之间的时间。这会引入延迟,并且会丢失一半的数据。我不能使用TCP / IP,因为系统需要实时操作。如何对以下行进行多处理(甚至可以完成):
list_of_chunks = [packet[i:i+n] for i in range(0, len(packet), 16)]
答案 0 :(得分:0)
我怀疑多处理(或多线程)会加速你想要的工作 - 太多的开销。而是考虑展开循环。在这种情况下,您可以编写一个脚本来为您创建代码:
这就是我的意思:
PACKET_SIZE = 700
packet = [0] * PACKET_SIZE # dummy packet
#list_of_chunks = [packet[i:i+16] for i in range(0, len(packet), 16)]
list_of_chunks = '\n '.join('packet[{}:{}]'.format(i, i+16)
for i in range(0, len(packet), 16))
print('list_of_chunks = [\n ' + list_of_chunks + ']')
输出:
list_of_chunks = [
packet[0:16]
packet[16:32]
packet[32:48]
packet[48:64]
packet[64:80]
packet[80:96]
...
packet[624:640]
packet[640:656]
packet[656:672]
packet[672:688]
packet[688:704]]
答案 1 :(得分:0)
而不是读取700字节的数据,而不是一个块,后来只读取16个字节并处理它。
例如:
while True:
chunk = read(16)
process (chunk)
这也可以在两个过程中完成:
# Process 1
while True:
chunk = read(16)
fifo.push (chunk)
# Process 2
while True:
chunk = fifo.pop()
process (chunk)