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

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

Многопроцессный сбор: как делить список адресов

11 ответов · 3 889 просмотров
знак участника Жигарев
ЖигаревНовичок
  • сообщений 178
  • на форуме 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)
Многопроцессный сбор: как делить список адресов: разбор в цифрах
Многопроцессный сбор: как делить список адресов: как это выглядит у меня

Как считаете вы? Интересует порядок, а не общие слова.

знак участника Верещак
ВерещакУчастник
  • сообщений 690
  • на форуме 10 мес
Жигарев писал: Многопроцессный сбор: как делить список адре…

Разбейте прогон на части, станет ровнее.

знак участника batch_run
batch_runЗнаток
  • сообщений 1 790
  • на форуме 4 мес
Жигарев писал: Многопроцессный сбор: как делить список адре…

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

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

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

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

Проверял на трёх проектах подряд, картина устойчивая.

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

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

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

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

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

Если поможет, напишите здесь же, пригодится следующим.

знак участника podset
podsetВетеран
  • сообщений 3 480
  • на форуме 1 мес
Жигарев писал: Многопроцессный сбор: как делить список адре…

Считайте по темпу, всё остальное вторично.

знак участника Ефим Гладков
Ефим ГладковУчастник
  • сообщений 850
  • на форуме 9 мес

Считайте по темпу, всё остальное вторично.

знак участника Мельник И.
Мельник И.Знаток
  • сообщений 1 655
  • на форуме 3 мес
Жигарев писал: Многопроцессный сбор: как делить список адре…

Начинал с того же, потом переделал.

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

знак участника logi_i_grafiki
logi_i_grafikiУчастник
  • сообщений 895
  • на форуме 9 мес
Жигарев писал: Многопроцессный сбор: как делить список адре…

Начните с малого объёма и растите постепенно.

знак участника Шамиль Н.
Шамиль Н.Участник
  • сообщений 1 135
  • на форуме 6 мес

Начинал с того же, потом переделал.

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

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

знак участника Погодин
ПогодинУчастник
  • сообщений 942
  • на форуме 6 мес

Начинал с того же, потом переделал.

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

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

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)
знак участника proxyled
proxyledЗнаток
  • сообщений 1 620
  • на форуме 6 мес

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

А что показывают логи в момент падения?

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

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

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