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

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

Node против питона на сборе: замер на одинаковой задаче

5 ответов · 1 947 просмотров
знак участника Ильдар М.
Ильдар М.Участник
  • сообщений 1 010
  • на форуме 7 мес
Код и программные интерфейсы

Есть рабочее решение, но оно мне не нравится.

Кратко по условиям.

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

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)

Что тут вообще считается нормой?

знак участника obhod_night
obhod_nightУчастник
  • сообщений 1 495
  • на форуме 5 мес
полезный ответ
Ильдар М. писал: Node против питона на сборе: замер на одинак…

Так и работает, проверено не один раз.

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

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

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 мес

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

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

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

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)
знак участника Полина Ржевская
Полина РжевскаяУчастник
  • сообщений 715
  • на форуме 10 мес

Это началось после какого-то изменения?

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

Добавлю то, что обычно вылезает на второй месяц работы.

Таймаут ставьте всегда и на соединение, и на чтение. Без него один зависший запрос держит поток часами.

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

Не гоните с первого дня, дайте себе запас.

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

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

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