Буферизация сокетов Python
Допустим, я хочу прочитать строку из сокета, используя стандартsocket
модуль:
def read_line(s):
ret = ''
while True:
c = s.recv(1)
if c == '\n' or c == '':
break
else:
ret += c
return ret
Что именно происходит вs.recv(1)
? Будет ли он выдавать системный вызов каждый раз? Я думаю, что я должен добавить буферизацию, так или иначе:
Для лучшего соответствия аппаратным и сетевым реалиям, значениеBUFSIZE должно быть относительно небольшой степенью 2, например, 4096.
http://docs.python.org/library/socket.html#socket.socket.recv
Но писать эффективную и поточно-ориентированную буферизацию нелегко. Что делать, если я используюfile.readline()
?
# does this work well, is it efficiently buffered?
s.makefile().readline()