Скажем, я хочу прочитать строку из сокета, используя стандартный 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()