позиции · сбор данных · отчёты
реклама IPrazon Network: приватные прокси IPv4 и SOCKS5, пул 12 000 адресов, безлимитный трафик, бесплатный тест до 2 часов

Разделы · Код и программные интерфейсы

Повторы запросов с нарастающей паузой: рабочая схема

10 ответов · 2 073 просмотров
знак участника tempo_ru
tempo_ruЗнаток
  • сообщений 2 470
  • на форуме 3 мес
Код и программные интерфейсы

Ниже кусок кода и описание того, что получается.

Обстановка вот такая.

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

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)

Что тут вообще считается нормой?

знак участника keymaker
keymakerВетеран
  • сообщений 3 210
  • на форуме 1 мес
полезный ответ
tempo_ru писал: Повторы запросов с нарастающей паузой: рабоч…

Был похожий случай, разбирали неделю.

Сессия должна создаваться один раз и жить весь прогон. Новая сессия на каждый запрос съедает время на установку соединения и путает настройки.

знак участника Николай Гат
Николай ГатУчастник
  • сообщений 875
  • на форуме 9 мес
tempo_ru писал: Повторы запросов с нарастающей паузой: рабоч…

Всё верно написали выше, добавлю от себя пару деталей.

Не держите весь список в памяти на больших объёмах. Читайте потоком, пишите пачками.

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)
знак участника ip_i_potoki
ip_i_potokiЗнаток
  • сообщений 2 350
  • на форуме 3 мес

Проверяйте из той же программы. Браузер показывает своё.

знак участника Оксана Пивень
Оксана ПивеньУчастник
  • сообщений 830
  • на форуме 9 мес
tempo_ru писал: Повторы запросов с нарастающей паузой: рабоч…

Проверял это на своей задаче, вывод такой же.

Проверку ответа делайте до разбора: пустое или короткое лучше отбросить сразу.

Тема нужная, подписался.

знак участника Светлана Бор
Светлана БорНовичок
  • сообщений 205
  • на форуме 1 года

Сколько адресов и какой темп при этом стоит?

знак участника prosmotr_logov
prosmotr_logovВетеран
  • сообщений 3 040
  • на форуме 1 мес

Долго держал старую схему, пока не упёрся.

Состояние прогона храните построчно. Один кусок в конце вас не спасёт. Тогда обрыв на девяностом проценте не стоит вам всего прогона.

Сессия должна создаваться один раз и жить весь прогон. Новая сессия на каждый запрос съедает время на установку соединения и путает настройки.

знак участника Останин
ОстанинУчастник
  • сообщений 1 105
  • на форуме 6 мес

Это верно для одной площадки и неверно для другой.

Считайте статистику прямо во время прогона. Узнать о провале в конце восьмичасового прогона обидно.

знак участника Астахов
АстаховУчастник
  • сообщений 1 150
  • на форуме 6 мес

Подтверждаю, у нас было ровно то же самое.

Таймаут ставьте всегда и на соединение, и на чтение. Без него один зависший запрос держит поток часами.

знак участника sbor_i_svod
sbor_i_svodЗнаток
  • сообщений 1 520
  • на форуме 5 мес

Пришёл к этому не сразу, сначала сделал ошибку.

Проверку ответа делайте до разбора: пустое или короткое лучше отбросить сразу.

Сессия должна создаваться один раз и жить весь прогон. Новая сессия на каждый запрос съедает время на установку соединения и путает настройки.

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)
знак участника Ким Р.
Ким Р.Новичок
  • сообщений 214
  • на форуме 1 года

Разбирались втроём, нашли случайно.

Не держите весь список в памяти на больших объёмах. Читайте потоком, пишите пачками.

Ответить в темеПодписаться

Рядом в разделе

Сеометр, форум специалистов по поиску и аналитике ПравилаУчастникиО форумеЛента 2026