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