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

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

aiohttp против requests на 300 потоках

11 ответов · 4 427 просмотров
знак участника serpwatch
serpwatchЗнаток
  • сообщений 2 610
  • на форуме 2 мес
Код и программные интерфейсыгорячая

Спрашиваю совета, потому что вариантов вижу три и все с изъяном.

Детали такие.

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

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)
aiohttp против requests на 300 потоках: разбор в цифрах
aiohttp против requests на 300 потоках: как это выглядит у меня

Подскажите, с чего начать разбор.

меряю по средам
знак участника limit_watch
limit_watchЗнаток
  • сообщений 2 560
  • на форуме 2 мес
полезный ответ
serpwatch писал: aiohttp против requests на 300 потоках

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

Cookie при массовом сборе лучше сбрасывать. Накопленное состояние делает поведение непредсказуемым.

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

знак участника 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 мес
serpwatch писал: aiohttp против requests на 300 потоках

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

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

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

Сохраняйте сырое, пересчитать успеете.

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

Сколько потоков стоит на прогоне?

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

Соглашусь, хотя пришёл к этому через неприятность.

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

Пусть висит, такие вопросы всплывают постоянно.

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

Наступал на это в прошлом сезоне.

Пул адресов выносите в отдельную часть кода. Тогда смена поставщика занимает минуту.

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

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

Что показывает простой запрос из консоли?

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

Всё правильно расписано, повторю своими словами.

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

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

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

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

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