ivknv/yadisk

Проблема с загрузкой zip архив 175Mb.

vv-m opened this issue · 5 comments

vv-m commented

Пытаюсь выгрузить zip архив 175Mb на ЯндексДиск - программа зависает.
Не отдает ни каких исключений. Просто висит.

vv-m commented

Дождался наконец исключения

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/main.py", line 64, in
y.upload(path_downloaded_backup, path_downloaded_backup)
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/venv/lib/python3.9/site-packages/yadisk/yadisk.py", line 684, in upload
self._upload(self.get_upload_link, file_or_path, dst_path, **kwargs)
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/venv/lib/python3.9/site-packages/yadisk/yadisk.py", line 652, in _upload
auto_retry(attempt, n_retries, retry_interval)
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/venv/lib/python3.9/site-packages/yadisk/utils.py", line 99, in auto_retry
raise e
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/venv/lib/python3.9/site-packages/yadisk/utils.py", line 96, in auto_retry
return func()
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/venv/lib/python3.9/site-packages/yadisk/yadisk.py", line 648, in attempt
with contextlib.closing(session.put(link, data=file, **temp_kwargs)) as response:
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/venv/lib/python3.9/site-packages/requests/sessions.py", line 649, in put
return self.request("PUT", url, data=data, **kwargs)
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/venv/lib/python3.9/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/venv/lib/python3.9/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
File "/Users/vladmironov2/Главная/Dev/notion_auto_backup/venv/lib/python3.9/site-packages/requests/adapters.py", line 501, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', timeout('The write operation timed out'))

ivknv commented

Это известная проблема. Если кратко, для определённых типов файлов REST API режет скорость загрузки на диск до 128 КБ/с. Единственный способ обойти ограничение - это указывать другое расширение файла.

vv-m commented

Спасибо за ответ!
Меня скорость не сильно беспокоит - главное что б загрузилось по итогу.
Какой таймаут посоветуете установить на 150 Мб - 200 Мб для ZIP?
Сейчас установил timeout=(15, 250)
Жду ... пока висит.
А то тестами не подобрать быстро, тк по 20 мин висит. А потом исключение выдает.

ivknv commented

Тяжело сказать, длинные промежутки ожидания возникают из-за того что Яндекс.Диск применяет ограничение скорости с задержкой. К моменту как ограничение скорости вступает в силу, вы могли загрузить на диск несколько десятков МБ данных. Вместо стабильной скорости вы получаете редкие кратковременные скачки до максимальной скорости и очень длинные периоды полного бездействия.

Вместо подбора таймаута я бы порекомендовал попробовать ограничить скорость загрузки со своей стороны (по крайней-мере насколько это возможно с requests), тогда периоды ожидания должны уменьшится.

Теоретически (если ограничение считается за фиксированный интервал времени), для скорости загрузки в 10 МБ/с время ожидания может составить около 78 с, при скорости в 100 МБ/с - уже около 780 c. Но совсем не факт, что вы сможете поддерживать соединение все это время на самом деле.

Но проще мне кажется всё-таки загружать файл с другим расширением и потом переименовывать обратно.

vv-m commented

Спасибо за развернутый ответ!