我正在通过UDP从微控制器获取数据。每个数据包都是一个十六进制字符串,我需要将其拆分为大小相等的块,以便之后进行一些处理。但是,由于数据包相对较大(每个数据包大约 700 个字符(,因此将一个数据包拆分为块所需的时间大于数据包到达之间的时间。这会导致延迟,并且一半的数据丢失。我不能使用TCP/IP,因为系统需要实时运行。我怎样才能多处理以下行(甚至可以做到(:
list_of_chunks = [packet[i:i+n] for i in range(0, len(packet), 16)]
我怀疑多处理(或多线程(是否会加快您想要完成的工作 - 开销太大。相反,请考虑展开循环。在这种情况下,您可以编写一个脚本来为您创建代码:
我的意思是:
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]]
而不是读取 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)