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