Пример #1
0
    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()
Пример #2
0
 def finish(self):
     self._flush_buffer()
     log.finish()