Разделы · Код и программные интерфейсы
Переписываю старый скрипт и хочу сделать правильно.
Опишу по порядку, что есть и чего не хватает.
Логирую код ответа, время и адрес, по которому шёл запрос. Питон, асинхронный сбор, одновременно держу около двухсот задач. Список адресов читаю из файла и раздаю по кругу.
Есть мысли, куда копать?
Присоединяюсь, схема рабочая.
Пул адресов выносите в отдельную часть кода. Тогда смена поставщика занимает минуту.
Адрес выбирайте по кругу с пропуском тех, что в отказе. Случайный выбор даёт перекос, кому-то достанется втрое больше запросов.
Хороший разбор, добавлю в закладки.
Подтверждаю по своей практике.
Не держите весь список в памяти на больших объёмах. Читайте потоком, пишите пачками.
Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.
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)Прогон падает всегда в одном месте?
Что показывает простой запрос из консоли?
Начинал с того же, потом переделал.
Ошибки разделяйте по типам. Отказ по сети и отказ площадки требуют разного поведения.
Пул адресов выносите в отдельную часть кода. Тогда смена поставщика занимает минуту.
Разбейте задачу на части.
Набор новых участников сейчас приостановлен. Читать форум можно без учётной записи, все темы открыты.
Когда набор откроют, объявление появится в разделе с короткими вопросами.
Форма работает в браузере и никуда ничего не отправляет.