我正在连接一个服务器,该服务器将向我发送需要逐行处理的流数据。所以我必须解析出单独的行,然后处理每一行。下面的代码似乎工作得很好,但我想知道是否有任何标准的设计模式来做这种事情。或者这是要走的路?
队列是否会引入任何严重的开销?我需要它尽可能快速和高效,这也是我偏离了像 twisted 这样的库的原因。
import socket, multiprocessing
def receive_proc(s, q):
data = ''
while True:
data += s.recv(4096)
if '\n' in data:
lines = data.split('\n')[:-1]
for line in lines:
if len(line) > 0:
q.put(line)
data = data.replace(line+'\n', '', 1)
q = multiprocessing.Queue()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 1234))
p = multiprocessing.Process(target=receive_proc, args=(s,q))
p.start()
while True:
line = q.get()
# do your processing here