<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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)