def METHOD_NAME(files):
    """Given a list of filenames as strings, find the filenames that aren't in our
    storage, and return.
    """
    # We use a thread pool in here, making direct HEAD requests to the storage URL
    # to see if the objects exist.
    # The threaded method is found to be the fastest -- see
    # https://gist.github.com/aronasorman/57b8c01e5ed2b7cbf876e7734b7b9f38
    # for benchmarking details.
    ret = []
    session = requests.Session()
    def check_file_url(f):
        filepath = generate_object_storage_name(os.path.splitext(f)[0], f)
        url = "/".join([settings.AWS_S3_ENDPOINT_URL, settings.AWS_S3_BUCKET_NAME, filepath])
        resp = session.head(url)
        if resp.status_code != 200:
            ret.append(f)
    # use a pool of 3 threads to make our queries
    pool = Pool(3)
    pool.map(check_file_url, files)
    return ret