Что происходит? Большую часть времени я получаю ошибку тайм-аута. Иногда появляется сообщение «Полезная нагрузка ответа не завершена». Если бы я загрузил это через кнопку сайта, это заняло бы около часа (без проблем). Я хотел бы сделать это с помощью кода, потому что существует множество разных файлов, загрузка которых занимает не менее часа, а разархивирование - еще час.
Я впервые пытаюсь выполнить асинхронную загрузку, и я не совсем уверен. Я установил тайм-аут на 2 часа, и он использует целых два часа и загружает только 70% zip-файла. (ДАЖЕ НА ЭТО ЗАХВАТЫВАЕТ ВДВОЙНОЕ ВРЕМЯ, ЧТОБЫ ПРОСТО ОТКЛЮЧИТЬ ССЫЛКУ В БРАУЗЕРЕ!!)
Я читал в другом сообщении, что увеличение лимита TCPConnector может помочь, но время ожидания все равно истекает.
Обновление: Я закомментировал строки журнала, так как не хотел воспроизводить, как его настроить, поскольку это не имеет значения.
import logger
import asyncio
import aiohttp
import aiofiles
import time
async def retrieve_data(base_link, payload, filename):
# connector=aiohttp.TCPConnector(limit=200)
async with aiohttp.ClientSession() as session:
try:
chunksize = 8*1024*1024 ## 8 MB
# , timeout=10800
async with session.get(base_link, params=payload, timeout=7200) as response:
file_size = int(response.headers['Content-Length'])
async with aiofiles.open(filename, 'wb') as fd:
progress = 0
async for chunk in response.content.iter_chunked(chunksize):
await asyncio.sleep(0)
await fd.write(chunk)
progress += len(chunk)
percentage = (progress / file_size) * 100
# logger.info(f"Download Progress: {percentage:.2f}%")
# logger.info(f"{time.strftime('%X')} - Downloaded file: ")
return filename
except asyncio.TimeoutError:
# logger.info(f"{time.strftime('%X')} - Error: asyncio.TimeoutError")
return ""
except Exception as e:
# logger.info(f"{time.strftime('%X')} - Error: {e}")
return ""
Я пробовал использовать любые функции readany() и read(), но проблемы остались те же.
while True:
chunk = await response.content.readany()
# chunk = await response.content.read(chunksize)
await asyncio.sleep(0)
if not chunk:
break
Подробнее здесь: https://stackoverflow.com/questions/798 ... es-aiohttp
Как скачать большой ZIP (4 ГБ>) через aiofiles, aiohttp ⇐ Python
Программы на Python
-
Anonymous
1766213965
Anonymous
Что происходит? Большую часть времени я получаю ошибку тайм-аута. Иногда появляется сообщение «Полезная нагрузка ответа не завершена». Если бы я загрузил это через кнопку сайта, это заняло бы около часа (без проблем). Я хотел бы сделать это с помощью кода, потому что существует множество разных файлов, загрузка которых занимает не менее часа, а разархивирование - еще час.
Я впервые пытаюсь выполнить асинхронную загрузку, и я не совсем уверен. Я установил тайм-аут на 2 часа, и он использует целых два часа и загружает только 70% zip-файла. (ДАЖЕ НА ЭТО ЗАХВАТЫВАЕТ ВДВОЙНОЕ ВРЕМЯ, ЧТОБЫ ПРОСТО ОТКЛЮЧИТЬ ССЫЛКУ В БРАУЗЕРЕ!!)
Я читал в другом сообщении, что увеличение лимита TCPConnector может помочь, но время ожидания все равно истекает.
[b]Обновление:[/b] Я закомментировал строки журнала, так как не хотел воспроизводить, как его настроить, поскольку это не имеет значения.
import logger
import asyncio
import aiohttp
import aiofiles
import time
async def retrieve_data(base_link, payload, filename):
# connector=aiohttp.TCPConnector(limit=200)
async with aiohttp.ClientSession() as session:
try:
chunksize = 8*1024*1024 ## 8 MB
# , timeout=10800
async with session.get(base_link, params=payload, timeout=7200) as response:
file_size = int(response.headers['Content-Length'])
async with aiofiles.open(filename, 'wb') as fd:
progress = 0
async for chunk in response.content.iter_chunked(chunksize):
await asyncio.sleep(0)
await fd.write(chunk)
progress += len(chunk)
percentage = (progress / file_size) * 100
# logger.info(f"Download Progress: {percentage:.2f}%")
# logger.info(f"{time.strftime('%X')} - Downloaded file: ")
return filename
except asyncio.TimeoutError:
# logger.info(f"{time.strftime('%X')} - Error: asyncio.TimeoutError")
return ""
except Exception as e:
# logger.info(f"{time.strftime('%X')} - Error: {e}")
return ""
Я пробовал использовать любые функции readany() и read(), но проблемы остались те же.
while True:
chunk = await response.content.readany()
# chunk = await response.content.read(chunksize)
await asyncio.sleep(0)
if not chunk:
break
Подробнее здесь: [url]https://stackoverflow.com/questions/79850711/how-to-download-large-zip-4gb-through-aiofiles-aiohttp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия