比方说,我想读从插座线,使用标准的socket
模块:Python的插座缓冲
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()
“它会每次发出系统调用吗?”为什么这很重要? – 2009-05-04 21:04:03
由于系统调用较慢。最好是获取大量数据(如果可用),然后处理它。现在我知道Python并不是特别快,也许这并不重要。但是文档说无论如何大块阅读都更好。 – 2009-05-06 06:46:38