X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9121aabce004cf42f60c775eb191c93020b9be42..e54662c069d72c7a22f89bd889370703790d2536:/sdk/python/arvados/arvfile.py?ds=sidebyside diff --git a/sdk/python/arvados/arvfile.py b/sdk/python/arvados/arvfile.py index 4b95835aac..0cc7d25a33 100644 --- a/sdk/python/arvados/arvfile.py +++ b/sdk/python/arvados/arvfile.py @@ -1060,7 +1060,8 @@ class ArvadosFile(object): if size == 0 or offset >= self.size(): return b'' readsegs = locators_and_ranges(self._segments, offset, size) - prefetch = locators_and_ranges(self._segments, offset + size, config.KEEP_BLOCK_SIZE * self.parent._my_block_manager()._keep.num_prefetch_threads, limit=32) + if self.parent._my_block_manager()._keep.num_prefetch_threads > 0: + prefetch = locators_and_ranges(self._segments, offset + size, config.KEEP_BLOCK_SIZE * self.parent._my_block_manager()._keep.num_prefetch_threads, limit=32) locs = set() data = [] @@ -1068,17 +1069,21 @@ class ArvadosFile(object): block = self.parent._my_block_manager().get_block_contents(lr.locator, num_retries=num_retries, cache_only=(bool(data) and not exact)) if block: blockview = memoryview(block) - data.append(blockview[lr.segment_offset:lr.segment_offset+lr.segment_size].tobytes()) + data.append(blockview[lr.segment_offset:lr.segment_offset+lr.segment_size]) locs.add(lr.locator) else: break - for lr in prefetch: - if lr.locator not in locs: - self.parent._my_block_manager().block_prefetch(lr.locator) - locs.add(lr.locator) + if self.parent._my_block_manager()._keep.num_prefetch_threads > 0: + for lr in prefetch: + if lr.locator not in locs: + self.parent._my_block_manager().block_prefetch(lr.locator) + locs.add(lr.locator) - return b''.join(data) + if len(data) == 1: + return data[0] + else: + return b''.join(data) @must_be_writable @synchronized