Разделы · Код и программные интерфейсы
Код рабочий, но ведёт себя не так, как я задумывал.
Чтобы вопрос был предметным, вот цифры.
Питон, асинхронный сбор, одновременно держу около двухсот задач. Логирую код ответа, время и адрес, по которому шёл запрос.
async with aiohttp.ClientSession() as s:
for i in range(3):
try:
r = await s.get(url, proxy=adres, timeout=30)
break
except Exception:
await asyncio.sleep(2 ** i)
Кто как это обходит?
На другой машине воспроизводится?
Расскажу, чем закончилось у меня.
Число одновременных задач подбирайте замером, а не на глаз. Обычно кривая выходит на полку, и дальше растёт только число отказов.
Отпишитесь, чем закончится, тема полезная.
Полгода назад ловил то же самое.
Разбор ответа держите отдельно от сбора. Тогда смена разметки не требует перегонять данные заново, достаточно перечитать сохранённое.
async with aiohttp.ClientSession() as s:
for i in range(3):
try:
r = await s.get(url, proxy=adres, timeout=30)
break
except Exception:
await asyncio.sleep(2 ** i)Смотрите подсети, а не только число адресов.
Уменьшите потоки вдвое и замерьте заново.