code: def sync_with_s3(self):
          
          # Create a list to put all the files we're going to update
          self.update_list = []
  
          # Figure out which files need to be updated and upload all these files
          logger.debug("Comparing {} local files with {} bucket files".format(
              len(self.local_file_list),
              len(self.s3_obj_dict.keys())
          ))
          if self.no_pooling:
              [self.compare_local_file(f) for f in self.local_file_list]
          else:
              cpu_count = multiprocessing.cpu_count()
              logger.debug("Pooling local file comparison on {} CPUs".format(cpu_count))
              pool = ThreadPool(processes=cpu_count)
              pool.map(self.compare_local_file, self.local_file_list)
  
          logger.debug("Uploading {} new or updated files to bucket".format(len(self.update_list)))
          if self.no_pooling:
              [self.upload_to_s3(*u) for u in self.update_list]
          else:
              logger.debug("Pooling s3 uploads on {} CPUs".format(cpu_count))
              pool = ThreadPool(processes=cpu_count)
              pool.map(self.pooled_upload_to_s3, self.update_list)
docs: Walk through our self.local_files list, and match them with the list
          of keys in the S3 bucket.