如果您有要作为行处理的原始输入,则io模块是您的朋友,因为它将在行中进行底层数据包组装。
您可以使用:
class SocketIO(io.RawIObase): def __init__(self, sock): self.sock = sock def read(self, sz=-1): if (sz == -1): sz=0x7FFFFFFF return self.sock.recv(sz) def seekable(self): return False
它比
endswith('n')因为如果一个数据包包含嵌入式换行符('abncd'),则io模块将正确处理它而使功能更强大。您的代码可能变为:
def receive_bar_updates(s): global all_bars data = '' buffer_size = 4096 fd = SocketIO(s) # fd can be used as an input file object for line in fd: if should_be_rejected_by_filter(line): continue # do not know what filter does... if line.startswith("BH") or line.startswith("BC"): symbol = str(line.split(",")[1]) all_bars[symbol].append(line) y = Thread(target=proccess_bars, kwargs={'symbol': symbol}) y.start()


