in alibabacloud_oss_v2/filelike.py [0:0]
def _next_chunk(self, offset):
if self._read_buf_offset != offset:
self._read_buf_offset = offset
self._seq_read_amount = 0
if self._generator:
self._num_ooo_read += 1
self._close_readers()
if self._read_buf:
data = self._read_buf
self._read_buf = None
else:
# switch to prefetch reader
if (self._enable_prefetch and
self._seq_read_amount >= self._prefetch_threshold and
self._num_ooo_read < 3):
if not self._generator:
self._generator = self._prefetch_generator(offset)
try:
data = next(self._generator)
except StopIteration:
data = b''
except Exception:
# fall back to read serially
self._seq_read_amount = 0
self._close_readers()
data = self._next_chunk_direct(offset)
else:
data = self._next_chunk_direct(offset)
if data is not None:
cn = len(data)
self._read_buf_offset += cn
self._seq_read_amount += cn
return data