Python sockets buffering
Digamos que quiero leer una línea desde un socket, usando el estándarsocket
módulo:
def read_line(s):
ret = ''
while True:
c = s.recv(1)
if c == '\n' or c == '':
break
else:
ret += c
return ret
Qué sucede exactamente ens.recv(1)
? ¿Emitirá una llamada al sistema cada vez? Supongo que debería agregar algo de búfer, de todos modos:
Para la mejor combinación con las realidades de hardware y red, el valor de bufsize debería ser una potencia relativamente pequeña de 2, por ejemplo, 4096.
http: //docs.python.org/library/socket.html#socket.socket.rec
Pero no parece fácil escribir un búfer eficiente y seguro para subprocesos. ¿Qué pasa si usofile.readline()
?
# does this work well, is it efficiently buffered?
s.makefile().readline()