def run(self):
        """
        Runs the thread! Should not be used use start() method instead.
        """
        self._running.set()
        self._status = TransferState.RUNNING
        self._time_started = time.time()

        parted_file = DPartedFile(self._temp_file,
                                  self._session,
                                  self.url,
                                  self._file_size,
                                  self._part_size,
                                  self._retry_count,
                                  self._timeout,
                                  self._api.download_pool)

        try:
            for part in parted_file:
                if self._stop_signal:
                    return
                self._running.wait()
                self._bytes_done += part.size
                if self._progress_callback:
                    progress = Progress(
                        parted_file.total, parted_file.total_submitted,
                        self._bytes_done, self._file_size, self.duration
                    )
                    self._progress_callback(progress)

        except Exception as exc:
            if self._errorback:
                return self._errorback(exc)
            else:
                raise SbgError('Download failed! %s' % str(exc))

        self._status = TransferState.COMPLETED
        try:
            os.rename(self._temp_file, self._file_path)
        except Exception:
            raise SbgError("Unable to rename the file.")

        if self._callback:
            return self._callback(self._status)