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

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

Сборщик на bash для простых задач: где предел

15 ответов · 2 165 просмотров
знак участника regionfix
regionfixНовичок
  • сообщений 525
  • на форуме 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)

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

знак участника Ханин П.
Ханин П.Знаток
  • сообщений 2 280
  • на форуме 2 мес
regionfix писал: Сборщик на bash для простых задач: где предел

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

знак участника Пётр Улесов
Пётр УлесовУчастник
  • сообщений 625
  • на форуме 11 мес

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

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

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

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)
знак участника Богдан Ярош
Богдан ЯрошУчастник
  • сообщений 990
  • на форуме 7 мес

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

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

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

знак участника Лунёва А.
Лунёва А.Новичок
  • сообщений 356
  • на форуме 1 года

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

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

знак участника Ильдар М.
Ильдар М.Участник
  • сообщений 1 010
  • на форуме 7 мес
regionfix писал: Сборщик на bash для простых задач: где предел

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

знак участника Ковтун
КовтунНовичок
  • сообщений 468
  • на форуме 11 мес

Осторожнее с этим выводом, он верен не всегда.

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

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

знак участника Ефремова Н.
Ефремова Н.Участник
  • сообщений 1 465
  • на форуме 5 мес

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

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

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

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

Согласен с предыдущим ответом, но с одной оговоркой.

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

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

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

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

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

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

знак участника Емельян Ц.
Емельян Ц.Знаток
  • сообщений 2 130
  • на форуме 3 мес

Был случай, когда всё сошлось только на третий день разбора.

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

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

знак участника obhod_night
obhod_nightУчастник
  • сообщений 1 495
  • на форуме 5 мес
regionfix писал: Сборщик на bash для простых задач: где предел

Осторожнее с этим выводом, он верен не всегда.

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

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

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 284
  • на форуме 4 мес

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

знак участника Полина Ржевская
Полина РжевскаяУчастник
  • сообщений 715
  • на форуме 10 мес

Согласен с предыдущим ответом, но с одной оговоркой.

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

знак участника thread_limit
thread_limitЗнаток
  • сообщений 2 620
  • на форуме 2 мес
regionfix писал: Сборщик на bash для простых задач: где предел

Уточните пару моментов, иначе гадаем.

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

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

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

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