通常我們通過網絡傳送大型字節數據,一般都進行復制、切片、修改等操作,這樣操作是非常低效。我們可以通過緩沖區協議對象,實現緩沖區零復制,避免復制、切片等頻繁而低效操作。
server.py
import socket
port = 8081
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', 8081))
while True:
data, addr = s.recvfrom(1024)
print "%s bytes from %s" % (len(data), addr)
client1.py
import socket, time
port = 8081
host = "localhost"
bufsize = 1024
## 沒有使用緩沖區對象
data = b'a' * 1024 * 1024 * 10
start = time.time()
while data:
sent_bytes = s.sendto(data[:bufsize], (host,port))
data = data[send_bytes]
end = time.time()
print "used_time: %s" % (end -start)
client2.py
import socket, time
port = 8081
host = "localhost"
bufsize = 1024
# memoryview緩沖區協議對象,實現零復制
# memoryview直接引用原內存地址來操作
data =memoryview( b'a' * 1024 * 1024 * 10)
start = time.time()
while data:
sent_bytes = s.sendto(data[:bufsize], (host,port))
data = data[send_bytes]
end = time.time()
print "used_time: %s" % (end -start)