code: def start(self):
          # type: (Uploader) -> None
          
          try:
              blobxfer.operations.progress.output_parameters(
                  self._general_options, self._spec)
              self._run()
          except (KeyboardInterrupt, Exception) as ex:
              if isinstance(ex, KeyboardInterrupt):
                  logger.info(
                      'KeyboardInterrupt detected, force terminating '
                      'processes and threads (this may take a while)...')
              else:
                  logger.exception(ex)
              self._wait_for_transfer_threads(terminate=True)
              self._wait_for_disk_threads(terminate=True)
          finally:
              # shutdown processes
              if self._md5_offload is not None:
                  self._md5_offload.finalize_processes()
              if self._crypto_offload is not None:
                  self._crypto_offload.finalize_processes()
              # close resume file
              if self._resume is not None:
                  self._resume.close()
docs: Start the Uploader
          :param Uploader self: this