def iter_buffers(self): buffer_counter = 0 while True: # determin the part that will be read from disk start = buffer_counter*len(self.buffer)*self.sub.step + self.sub.start if start >= self.sub.stop: break stop = min(start + len(self.buffer)*self.sub.step, self.sub.stop) # read the part slice(start, stop, step) from each track and store # it in the buffer array log(" %i " % start, False) first_size = None for track, column in self._iter_fields(): size = track.read_into(column, slice(start, stop, self.sub.step)) if first_size is None: first_size = size elif first_size != size: raise Error("Not all tracks are of equal length!") # yield the relevant part of the buffer array if size == len(self.buffer): yield self.buffer[:] else: yield self.buffer[:size] break buffer_counter += 1 log(" %i " % stop, False) log.finish()
def finish(self): self._flush_buffer() log.finish()