比方說,我想讀從插座線,使用標準的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