def _flush_range(self, buffer, start, end):
        """
        Flush a buffer to a range of the file.

        Meant to be used asynchronously, used to provides parallel flushing of
        file parts when applicable.

        Args:
            buffer (memoryview): Buffer content.
            start (int): Start of buffer position to flush.
            end (int): End of buffer position to flush.
        """
        # On first call, Get file size if exists
        with self._size_lock:
            if not self._size_synched:
                self._size_synched = True
                try:
                    self._size = self.raw._size
                except (ObjectNotFoundError, UnsupportedOperation):
                    self._size = 0

        # It is not possible to flush a part if start > size:
        # If it is the case, wait that previous parts are flushed before
        # flushing this one
        while start > self._size:
            sleep(self._FLUSH_WAIT)

        # Flush buffer using RAW IO
        self._raw_flush(buffer, start, end)
Flush a buffer to a range of the file.

        Meant to be used asynchronously, used to provides parallel flushing of
        file parts when applicable.

        Args:
            buffer (memoryview): Buffer content.
            start (int): Start of buffer position to flush.
            end (int): End of buffer position to flush.