Разделы · Код и программные интерфейсы
Спрашиваю совета, потому что вариантов вижу три и все с изъяном.
Состояние прогона храню в файле, чтобы продолжать после обрыва. Результаты пишу пачками по тысяче строк. Питон, асинхронный сбор, одновременно держу около двухсот задач.
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)
Кто держит похожие объёмы, отзовитесь.
Работает, пока не выросли объёмы.
Число одновременных задач подбирайте замером. На глаз тут промахиваются всегда. Обычно кривая выходит на полку, и дальше растёт только число отказов.
На такой задаче адреса надо держать свои. Общий пул тут подведёт. Общий пул делится с незнакомыми людьми, и лимит вы никогда не контролируете. Я беру приватные серверные прокси и сплю спокойно.
Держите запас, впритык не работает.
Осторожнее с этим выводом, он верен не всегда.
Проверку ответа делайте до разбора: пустое или короткое лучше отбросить сразу.
Сохранил, пригодится в следующем проекте.
Настройка применилась вообще?
Что в логах в этот момент?
Так же считаю, и коллеги считают так же.
Ошибки разделяйте по типам. Отказ по сети и отказ площадки требуют разного поведения.
Таймаут ставьте всегда и на соединение, и на чтение. Без него один зависший запрос держит поток часами.
Тема как раз вовремя, сам этим занят.
Расскажу, чем закончилось у меня.
Разбор ответа держите отдельно от сбора. Тогда смена разметки не требует перегонять данные заново, достаточно перечитать сохранённое.
Таймаут ставьте всегда и на соединение, и на чтение. Без него один зависший запрос держит поток часами.
Держите нас в курсе.
Похоже на правду, у меня цифры близкие.
Планировщик системы проще своей очереди, пока задач мало. После полусотни задач своя очередь окупается.
Состояние прогона храните построчно. Один кусок в конце вас не спасёт. Тогда обрыв на девяностом проценте не стоит вам всего прогона.
До сих пор помню, чем это закончилось.
Таймаут ставьте всегда и на соединение, и на чтение. Без него один зависший запрос держит поток часами.
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)Сохраняйте сырое, пересчитать успеете.
Сначала делал так же, потом переделал всё.
Сессия должна создаваться один раз и жить весь прогон. Новая сессия на каждый запрос съедает время на установку соединения и путает настройки.
Что в логах в этот момент?
Плюсую, сам пришёл к тому же через полгода проб.
Сессия должна создаваться один раз и жить весь прогон. Новая сессия на каждый запрос съедает время на установку соединения и путает настройки.
Набор новых участников сейчас приостановлен. Читать форум можно без учётной записи, все темы открыты.
Когда набор откроют, объявление появится в разделе с короткими вопросами.
Форма работает в браузере и никуда ничего не отправляет.