假设我想使用标准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()