使用多处理在块中拆分字符串

时间:2017-07-28 13:22:19

标签: python split multiprocessing chunks

我通过UDP从微控制器获取数据。每个数据包都是一个十六进制字符串,我需要将其拆分成相等大小的块,然后再进行一些处理。然而,由于分组相对较大(每个大约700个字符),因此将一个分成块的时间大于分组到达之间的时间。这会引入延迟,并且会丢失一半的数据。我不能使用TCP / IP,因为系统需要实时操作。如何对以下行进行多处理(甚至可以完成):

list_of_chunks = [packet[i:i+n] for i in range(0, len(packet), 16)]

2 个答案:

答案 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)