позиции · сбор данных · отчёты
реклама 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