code: def submit(self):
  
          
          futures = []
          while self.submitted < 4 and not self.done():
              part = self.parts.pop(0)
              part_number = part['part']
              part_read_offset = part['offset']
              part_read_limit = part['limit']
  
              self.fp.seek(part_read_offset)
              part_data = self.fp.read(part_read_limit - part_read_offset)
  
              futures.append(
                  self.pool.submit(
                      _upload_part, self.api, self.session,
                      self._URL['upload_part'], self.upload_id,
                      part_number, part_data, self.retry, self.timeout
                  )
              )
  
              self.submitted += 1
              self.total_submitted += 1
  
          return futures
docs: Partitions the file into chunks and submits them into group of 4
          for upload on the api upload pool.
          :return: Futures