def read(size): ret = '' remain = size while True: data = sock.recv(remain) ret += data # 这里不断会有新的str对象产生 if len(data) == remain: break remain -= len(data) return ret
使用meoryview之后,避免了不断的字符串拼接和新对象的产生
1 2 3 4 5 6 7 8 9 10 11
def read(size): ret = memoryview(bytearray(size)) remain = size while True: data = sock.recv(remain) length = len(data) ret[size - remain: size - remain + length] = data if len(data) == remain: break remain -= len(data) return ret