client: chunked writes

This client-side code alone improves the typical transfer speed of a
51572-byte file from 91.85 seconds to 25.89 seconds.

This appears to be heavily bottlenecked by the python side of the
transfer--increasing the serial line speed has nearly zero affect on
the total transfer time.
This commit is contained in:
Zack Buhman 2024-03-13 21:29:12 +08:00
parent d912278afd
commit 328e9e18bd

View File

@ -31,18 +31,25 @@ def sync(ser, b, wait=0.1):
def symmetric(ser, b):
l = []
for i, c in enumerate(b):
if i % 32 == 0:
mem = memoryview(b)
i = 0
chunk_size = 16
while i < len(b):
if i % 128 == 0:
print(i, end=' ')
sys.stdout.flush()
while True:
if ser.in_waiting:
res = ser.read(ser.in_waiting)
l.extend(res)
if len(l) + 8 >= i:
if len(l) + chunk_size >= i:
break
ser.write(bytes([c]))
chunk_size = min(chunk_size, len(b) - i)
assert chunk_size > 0, chunk_size
ser.write(b[i:i+chunk_size])
i += chunk_size
time.sleep(0.1)
res = ser.read(ser.in_waiting)