使用多处理将字符串拆分为块



我正在通过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)

相关内容

  • 没有找到相关文章

最新更新