- #!/usr/bin/python3
- from io import StringIO, BytesIO
- # Old
- def copyfileobj(fsrc, fdst, length=16*1024):
- """copy data from file-like object fsrc to file-like object fdst"""
- while 1:
- buf = fsrc.read(length)
- if not buf:
- break
- fdst.write(buf)
- # New
- def _copyfileobj(fsrc, fdst, length=16*1024):
- """copy data from file-like object fsrc to file-like object fdst"""
- write = fdst.write
- if hasattr(fsrc, 'readinto') and length > 0:
- buf = memoryview(bytearray(length))
- readinto = fsrc.readinto
- while 1:
- recv_len = readinto(buf)
- if recv_len < length:
- # write remaining content if any.
- write(buf[:recv_len])
- break
- write(buf)
- else:
- read = fsrc.read
- while 1:
- buf = read(length)
- if not buf:
- break
- write(buf)
- value = bytearray([0]*107374182) # 100mb
- # value = bytearray([0]*536870912) # 500mb
- with BytesIO(value) as fsrc:
- with BytesIO() as fdst:
- copyfileobj(fsrc, fdst)