假设我想使用标准的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()
+=
构建字符串潜在地具有二次时间复杂度,而构建列表并在最后使用str.join
则始终具有线性时间复杂度。 - Mike Grahamstr.join
而不是+=
。但是,您可以使用bytearray
使其更易读(但比str.join
函数稍慢)。两者都比+=
更好的选项。 - Chen A.