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

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

Асинхронный сбор: сколько задач держать одновременно

12 ответов · 3 510 просмотров
знак участника Астахов
АстаховУчастник
  • сообщений 1 150
  • на форуме 6 мес
Код и программные интерфейсыгорячая

Переписываю старый скрипт и хочу сделать правильно.

Повторы стоят три раза с паузой, которая растёт вдвое. Результаты пишу пачками по тысяче строк.

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

Хочется услышать цифры от практиков.

знак участника sbor_i_svod
sbor_i_svodЗнаток
  • сообщений 1 520
  • на форуме 5 мес
Астахов писал: Асинхронный сбор: сколько задач держать одно…

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

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

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

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

знак участника Ким Р.
Ким Р.Новичок
  • сообщений 214
  • на форуме 1 года
Астахов писал: Асинхронный сбор: сколько задач держать одно…

У нас на прошлом проекте это выглядело так.

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

знак участника Данилов К.
Данилов К.Участник
  • сообщений 1 245
  • на форуме 8 мес

Уменьшите потоки вдвое и замерьте заново.

знак участника retry_backoff
retry_backoffЗнаток
  • сообщений 2 710
  • на форуме 2 мес
полезный ответ

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

знак участника Барсов
БарсовУчастник
  • сообщений 1 420
  • на форуме 8 мес

Держите запас, ровно по расчёту работать не выйдет.

знак участника Валерия Гонт
Валерия ГонтНовичок
  • сообщений 268
  • на форуме 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)
знак участника Кравчук
КравчукЗнаток
  • сообщений 1 840
  • на форуме 4 мес

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

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

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

знак участника Дёмин С.
Дёмин С.Участник
  • сообщений 1 190
  • на форуме 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)
знак участника Костин
КостинНовичок
  • сообщений 540
  • на форуме 1 года
Астахов писал: Асинхронный сбор: сколько задач держать одно…

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

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

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

Держите нас в курсе.

знак участника Алина Прошина
Алина ПрошинаНовичок
  • сообщений 140
  • на форуме 1 года

Какая версия программы и что с настройками по умолчанию?

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

знак участника Симаков
СимаковУчастник
  • сообщений 780
  • на форуме 9 мес

Логи в помощь, без них это гадание.

знак участника Саша Верхов
Саша ВерховНовичок
  • сообщений 152
  • на форуме 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