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