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