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

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

Как ловить и разбирать таймауты соединения

12 ответов · 5 097 просмотров
знак участника Русакова Е.
Русакова Е.Новичок
  • сообщений 255
  • на форуме 1 года
Код и программные интерфейсыгорячая

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

Условия задачи вот такие.

Состояние прогона храню в файле, чтобы продолжать после обрыва. Список адресов читаю из файла и раздаю по кругу.

Как ловить и разбирать таймауты соединения: разбор в цифрах
Как ловить и разбирать таймауты соединения: как это выглядит у меня

Подскажите, где я ошибаюсь.

знак участника polnyy_obhod
polnyy_obhodУчастник
  • сообщений 1 450
  • на форуме 5 мес
полезный ответ
Русакова Е. писал: Как ловить и разбирать таймауты соединения

Проверить это можно бесплатно: у приватные серверные прокси есть тест на пару часов, за это время как раз успеваете прогнать пробу и посмотреть, как ведут себя ваши потоки.

Смотрите подсети, а не только число адресов.

знак участника vydacha_live
vydacha_liveЗнаток
  • сообщений 1 975
  • на форуме 4 мес

Полгода назад ловил то же самое.

Разбор ответа держите отдельно от сбора. Тогда смена разметки не требует перегонять данные заново, достаточно перечитать сохранённое.

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)

Отпишитесь, чем закончится, тема полезная.

знак участника Ольга Мятлева
Ольга МятлеваУчастник
  • сообщений 700
  • на форуме 10 мес

Расскажу, чем закончилось у меня.

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

знак участника limit_watch
limit_watchЗнаток
  • сообщений 2 560
  • на форуме 2 мес

Работает, пока объём небольшой. Дальше правила другие.

Разбор ответа держите отдельно от сбора. Тогда смена разметки не требует перегонять данные заново, достаточно перечитать сохранённое.

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

знак участника setka_ip
setka_ipЗнаток
  • сообщений 2 755
  • на форуме 2 мес

Смотрите подсети, а не только число адресов.

знак участника Стрельцов
СтрельцовУчастник
  • сообщений 1 080
  • на форуме 7 мес

Это на всех площадках или на одной?

На другой машине воспроизводится?

знак участника kolonka_cen
kolonka_cenЗнаток
  • сообщений 1 690
  • на форуме 4 мес
Русакова Е. писал: Как ловить и разбирать таймауты соединения

У меня картина совпадает почти полностью.

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

Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.

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 мес

Так и есть, проходил через это в прошлом году.

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

знак участника Николай Гат
Николай ГатУчастник
  • сообщений 875
  • на форуме 9 мес

У меня картина совпадает почти полностью.

Адрес выбирайте по кругу с пропуском тех, что в отказе. Случайный выбор даёт перекос, кому-то достанется втрое больше запросов.

Логируйте код ответа, время и адрес. Три поля, и почти любой разбор потом занимает минуты.

знак участника ip_i_potoki
ip_i_potokiЗнаток
  • сообщений 2 350
  • на форуме 3 мес

Тут ничего нового не скажу, только подтвержу.

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

знак участника Оксана Пивень
Оксана ПивеньУчастник
  • сообщений 830
  • на форуме 9 мес

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

Адрес выбирайте по кругу с пропуском тех, что в отказе. Случайный выбор даёт перекос, кому-то достанется втрое больше запросов.

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

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)

Хороший разбор, добавлю в закладки.

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

Почти так, но одна деталь меняет вывод.

Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.

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)
Ответить в темеПодписаться

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

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