Как избежать отказа в доступе после загрузки файла? - PullRequest
0 голосов
/ 03 декабря 2018

Я загружаю файлы в несколько потоков, каждый потоком.

def download_file(self, dest:str, filename:str):

    r = requests.get(self.url, stream=True, headers={
        "Accept": "application/xml",
        "Accept-Charset": "utf-8",
        "Accept-Language": "pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4",
        "Authorization": self.auth
    })
    with open(f"{dest}/{filename}", 'wb') as f:
        total_length = r.headers.get("Content-length")
        if not total_length:
            f.write(r.content)
        else:
            for chunk in progress.bar(r.iter_content(chunk_size=1024), expected_size=(int(total_length)/1024) + 1):
                if chunk:  # filter out keep-alive new chunks
                    f.write(chunk)
                    f.flush() 
        f.close()
    return True

После этого я загружаю эти загруженные файлы в корзину S3.

def process_path_for_S3(local_file_path):
    if not parsed_args.ignore_s3:
        s3_repository = parsed_args.s3
        logging.info(f"Upando o arquivo '{local_file_path['filename']}' para o S3...")

        s3_key = f"{s3_repository.split('/')[1]}/{s3_repository.split('/')[2]}/{local_file_path['filename']}"
        for i in range(0, parsed_args.tries):
            try:
                _s3.s3.meta.client.upload_file(Bucket=s3_repository.split('/')[0], Key=s3_key, Filename=local_file_path["local_path"])
            except Exception as e:
                logging.info(">>> ERRO <<<")
                logging.info(e)
                logging.info(">>> NÃO FOI POSSÍVEL REALIZAR O UPLOAD DO ARQUIVO PARA O S3 <<<")
                logging.info("Tentando novamente...")
                sleep(5)
                continue
            break
        logging.info(f">>> ARQUIVO UPADO COM SUCESSO PARA O S3 <<<")
    else:
        logging.info(">>> IGNORANDO PROCESSO DE UPLOAD NO S3 <<<")

logging.info(f">>> PROCESSANDO UPLOAD PARA O S3 EM {parsed_args.s3_threads} THREADS <<<")
s3_multiprocessor._map(process_path_for_S3, local_file_paths) # Multithreading code.

Проблема заключается в том, когда я пытаюсьчтобы открыть файлы для загрузки их на S3, я получаю ошибки разрешения.

[Errno 13] Permission denied: 'C:/Users/User/AppData/Roaming/...'

Это не может быть связано с многопоточностью (сохранение потока и попытка открыть одновременно), потому что япопытался отключить многопоточность уже, и я получаю ту же ошибку.Единственная причина, по которой я могу придумать, - это «загрузка по потоку».Мой коллега предложил мне проверить конец файла в файле, но как мне это сделать, если я не могу открыть это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...