Grequests Python - 100 HTTP запросов за 2 секунды

Sdílet
Vložit
  • čas přidán 23. 07. 2024
  • Как быстро отправить много HTTP запросов в Python?
    ⭐ Курс ООП и Приват канал: www.zproger-school.com/?...
    ⭐ Телеграм канал: t.me/+ZFBRE5mlwdcyNGJh
    В данном видео мы рассмотрим библиотеку Grequests от разработчиков всем известной основной библиотеки Requests, которая на данный момент работает синхронно. Grequests же наследует весь функционал Requests и добавляет к нему технологию gevent, что позволяет ему работать асинхронно.
    В итоге скорость запросов возрастает примерно в 20 раз.
    В этом видео мы рассмотрим возможности библиотеки, сравним с Requests и Aiohttp, рассмотрим хорошие и плохие практики во время работы с данной библиотекой и рассмотрим основные ошибки новичков.
    📁 Github: github.com/Zproger
    📁 Все плейлисты с уроками: bit.ly/39GaY89
    📁 Связаться со мной: zproger777@gmail.com
    📁 Поддержать криптовалютой: github.com/Zproger/donate
    Тайм-коды:
    0:00 - Вступление
    0:28 - Плюсы Grequests. Почему она, а не aiohttp?
    1:30 - За сколько секунд Requests делает 100 запросов?
    2:40 - Установка Grequests
    3:13 - Принцип работы Grequests
    5:38 - За сколько секунд Grequests делает 100 запросов?
    5:55 - Выводим status_code каждого запроса grequests
    6:32 - Обработка ошибок в запросах grequests
    7:29 - Grequests imap. Должен быть быстрее map, а на деле в 10 раз медленее
    8:12 - Как правильно импортировать Grequests. О Monkey Patch
    9:36 - Вся полезная информация в описании под видео

Komentáře • 165

  • @domochevsky4703
    @domochevsky4703 Před 2 lety +15

    Отлично, я под каждым видосом прошу бахнуть серию видосов по асинхронщине! И вот - начало положено.
    Спс, бро, за годный контент.

    • @zproger
      @zproger  Před 2 lety +1

      Рад что помогает
      Да, начало положено :)))

  • @artembagachkov933
    @artembagachkov933 Před 2 lety +32

    Ничено себе так, более чём в 20 раз ускорил. У тебя ролики такие разнообразные, что скоро будут ответы по всем вопросам по Python :D

    • @zproger
      @zproger  Před 2 lety +2

      Благодарю :))))

  • @night_niker
    @night_niker Před 2 lety +4

    Спасибо за твой труд! Благодаря мини-курсу по парсингу написал курсач))) канал в источниках указал в знак благодарности 😙

    • @zproger
      @zproger  Před 2 lety

      Круто, рад что помогло

  • @irwe3514
    @irwe3514 Před 2 lety +2

    Полезно, спасибо что делаешь ролики по таким темам

    • @zproger
      @zproger  Před 2 lety

      Благодарю за поддержку!

  • @ivanokkekes8370
    @ivanokkekes8370 Před rokem +2

    Это так спасло меня! Я уже думал разбираться в асинхронности но это grequests очень прост и эффективный! Спасибо мой гуру

  • @mr.6932
    @mr.6932 Před 2 lety +11

    Наткнулся на твой канал около месяца назад, материал подаешь очень хорошо, все понятно ! Продолжай в том же духе с меня лайки, с тебя видео ! :)

    • @zproger
      @zproger  Před 2 lety +1

      Договорились :)

    • @ANUARKA
      @ANUARKA Před 2 lety

      Оцени мой репчик

  • @mylife-ej8et
    @mylife-ej8et Před 2 lety +1

    Продолжай снимать видосы, у тебя хороший и разнообразный контент

    • @zproger
      @zproger  Před 2 lety

      Благодарю, буду продолжать

  • @konstantinvoropaev2623
    @konstantinvoropaev2623 Před 2 lety +31

    Я не лез в код grequests но выглядит, как событийный цикл где-то внутри grrquests, что-бы не прибегать к асинку. Стоит в том числе отметить, что подобная архитектура (отправлять пачку запросов одновременно) не сильно востребована в вебе, за исключением скрапинга (да и в скрапинге тоже, со всеми осторожностями и огрничениями по времени и кол-ву запросов). В Питоновском беке чаще востребованы асинхронные запросы, чем пакеты по 100 запросов. Описанная вами архитектура кстати очень похожа (map же) на threading/multiprocessing.Pool, пока весь пакет не завершиться, то ответа не получишь, а интерактивный режим - imap, как если бы я в функциях для пула писал функционал сохранения результата.
    То есть я конечно вижу, в каких ситуациях востребована пакетная обработка запросов, но это конечно весьма нишевая функция получилась.
    Кстати, если семантика aiohttp не нравится, попробуйте httpx, он близок к requests по семантике и умеет работать в обоих режимах (синк/асинк)

    • @rooniemosel4744
      @rooniemosel4744 Před 2 lety

      Ты умен. Как сделать скрипт, который сможет отправлять максимально много запросов на сервер, и настраивался бы он из веб-расширения.

    • @ivankondrashkin
      @ivankondrashkin Před 2 lety

      а вот множество запросов вот полезно если делаешь web hook server какой либо

    • @armatofik885
      @armatofik885 Před 2 lety +1

      Бывает на бэкенде полезно отправлять пачку запросов в микросервисной архитектуре, когда умный микросервис составляет ответ для клиента, в котором содержатся данные из множества микросервисов

    • @orest_savitskyi
      @orest_savitskyi Před rokem

      Рассылка сообщений пользователям в телеграм боте

  • @A-R-M_009
    @A-R-M_009 Před 2 lety +1

    Спасибо за Твой труд! Было полезно.

    • @zproger
      @zproger  Před 2 lety

      Рад что понравилось :)

  • @todrgor
    @todrgor Před 2 lety +1

    Спасибо, побольше бы такого интересного

    • @zproger
      @zproger  Před 2 lety

      Буду стараться

  • @MR-gz7pl
    @MR-gz7pl Před 2 lety +1

    Круто) спс за твои видео

    • @zproger
      @zproger  Před 2 lety

      Рад что понравилось :))

  • @ivanfeast1548
    @ivanfeast1548 Před 2 lety +1

    Четко, спасибо!

    • @zproger
      @zproger  Před 2 lety

      Рад что понравилось

  • @user-dq5yx3cq3f
    @user-dq5yx3cq3f Před rokem

    Ну круто же ! Спасибо

  • @MadMike93
    @MadMike93 Před 2 lety +1

    Спасибо)) не знал)) надо будет потыкать))

    • @zproger
      @zproger  Před 2 lety

      Да, прикольный инструмент)

  • @goshaposhlyy
    @goshaposhlyy Před 2 lety +1

    Спасибо за ценные знания

    • @zproger
      @zproger  Před 2 lety

      Рад что принес пользу!

  • @user-hr5oi7ix5g
    @user-hr5oi7ix5g Před 2 lety +2

    Очень круто и информативно !!! А главное теперь все работает намного быстрее :)

    • @zproger
      @zproger  Před 2 lety

      Это хорошо :)

  • @pixel7139
    @pixel7139 Před 2 lety

    коммент в поддержку)
    супер)

  • @asemkrsk
    @asemkrsk Před 2 lety +1

    не прокатило использовать с headers["X-Token-API"], в отличии от обычного request`a на котором работает но медленно, знает кто решение?

  • @orest_savitskyi
    @orest_savitskyi Před rokem +7

    Интересно если сравнить тот же threading на 100 потоков с обычным request и Grequests, какой будет итоговая разница в скорости выполнения

    • @grisha_KAPTOHKA
      @grisha_KAPTOHKA Před rokem

      не будет, автор сказал, что если использовать потоки, то чудо не свершится

  • @gapchannelAi
    @gapchannelAi Před 2 lety +1

    Крутой ролик

  • @takiekakmi7532
    @takiekakmi7532 Před rokem +1

    Интересненько) хотя, конкретно для себя, я вижу только применение в нагрузочном тестировании api с тредами

  • @develper2
    @develper2 Před 2 lety +1

    Наконец будет fast requests

  • @Alex-uh6qh
    @Alex-uh6qh Před 2 lety +2

    1:48 домен gac...) Хорошая опечатка, dungeon master одобряет

  • @okeygoogle3188
    @okeygoogle3188 Před 2 lety +1

    а как-же requests с использованием Session?

  • @theAKIRAband
    @theAKIRAband Před 2 lety +1

    Воу воу) палехче)

  • @renatshaym
    @renatshaym Před rokem

    А что лучше, быстрее и эффективнее использовать: requests-html или grequests? В requests-html, как я знаю, есть ассинхронный подход и вроде как тоже можно много запросов посылать?

  • @alanchickk
    @alanchickk Před 2 lety

    Как в grequests отправлять куки, заголовки, данные?

  • @rucat284
    @rucat284 Před 2 lety +2

    А как использовать proxy?

  • @predatel_rodini
    @predatel_rodini Před 2 lety +1

    Чётко

  • @user-jh7jc3qe2s
    @user-jh7jc3qe2s Před 2 lety +1

    Полезный пакет, будем пользоваться

  • @Juravliik
    @Juravliik Před 2 lety +1

    чётко

  • @dmitrium12
    @dmitrium12 Před 2 lety +1

    есть-ли смысл использовать Grequests для 1 запроса? и что за линукс ты используешь?

    • @zproger
      @zproger  Před 2 lety

      смысла нет.
      Дистрибутив - Zorin OS.

  • @vlatterran
    @vlatterran Před 2 lety +1

    Мне понадобилось 28 строк кода, чтобы очень условно, но повторить данный функционал через, как мне кажется, более логичное оборачивание aiohttp в синхронный клиент. И делал я это в метро на телефоне.

    • @zproger
      @zproger  Před 2 lety

      Интересно :D
      Некоторые даже в метро на телефоне кодят

  • @blackcatdevel0per
    @blackcatdevel0per Před 8 měsíci

    Он работает на питоновском map?

  • @user-ok9tp5lx6n
    @user-ok9tp5lx6n Před rokem

    Спасибо

  • @CalmVideo
    @CalmVideo Před 2 lety +1

    Очень полезное видео! Можешь сделать видео, как защищаться от бана сайта по ip, у меня даже впн не робит, почему-то

    • @CalmVideo
      @CalmVideo Před 2 lety

      Про парсинг

    • @tox_im3335
      @tox_im3335 Před 2 lety

      @@CalmVideo не шарю точно но возможно бан не по IP а по Mac адресу

  • @rucat284
    @rucat284 Před 2 lety +1

    а как получать response.text мне пишет что нет такого

    • @zproger
      @zproger  Před 2 lety

      Он же возвращает список насколько я помню,
      нужно сначала обратиться к индексу, чтобы получить
      объект grequests

  • @azamtoiri
    @azamtoiri Před 2 lety +1

    Объясните пожалуйста, для чего нужны запросы?
    Если можно приведите пример я так быстрее понимаю

    • @zproger
      @zproger  Před 2 lety

      На канале есть 2 курса по парсингу, там максимально
      понятно будет :)

  • @user-ww9zu6zq2p
    @user-ww9zu6zq2p Před 2 lety

    Классный модуль, рад что нашел у тебя данное видео, но к сожалению с помощью grequests после нескольких запросов выдает ошибку 429(too many requests), с помощью imap ошибки нет, но из-за этого скорость падает в 10 раз. Можно решить проблему с помощью time.sleep, но тогда это все похоже больше на костиль и скорость падает раз в 5.

    • @orest_savitskyi
      @orest_savitskyi Před rokem

      Скорее всего на вами запрашиваемом сайте есть определенного рода защита от условно dos атаки, ограничение на количество запросов в секунду к примеру с одного IP. Соответсвенно нужно искать обходные решения на подобие использования прокси

  • @takotofucus4383
    @takotofucus4383 Před 2 lety +1

    Я конечно покажусь душнилой, но не странно ли замерять скорость imap когда у тебя есть вывод на экран? Ведь в первом случае вывод сначала ты не сделал. Понятное дело что скорость бы увеличилась не сильно, но все же print мог разительно растянуть время выполнения программы.

    • @zproger
      @zproger  Před 2 lety

      Я только после этого комментария вспомнил что я print в первом примере не указывал...
      Тогда да, скорость будет значительно отличаться, надо бы перепроверить imap, возможно он действительно быстрее :)

  • @evgeniisharaborin8071

    А что быстрее httpx или grequest?

  • @radikgalliamov
    @radikgalliamov Před 2 lety +1

    Было бы неплохо написать mvp тест для api, просмотры будут)

    • @zproger
      @zproger  Před 2 lety

      В плане с тестом через этот инструмент?

    • @radikgalliamov
      @radikgalliamov Před 2 lety

      @@zproger Лучше наверное через реквест, на ваш выбор

  • @user-ts6wk3mu2l
    @user-ts6wk3mu2l Před 2 lety +1

    А что за ось на видео?

  • @Didar.Kussain
    @Didar.Kussain Před 2 lety +2

    👍

  • @zzzahon8519
    @zzzahon8519 Před rokem +1

    Обычно есть проблема сделать рейт лимит)) потому что у сайтов ограничение на количество запросов, иначе они просто блочат

    • @rebuilderowner78673
      @rebuilderowner78673 Před 3 měsíci

      Рандомный прокси вешаешь на каждый запрос)

  • @arew8521
    @arew8521 Před 2 lety

    Блин, а как использовать grequest с bs4? Если кто-то знает подскажите, плз. Очень надо

    • @zproger
      @zproger  Před 2 lety +1

      Просто получить ответы отдельно и уже их использовать вместе с bs4

    • @arew8521
      @arew8521 Před 2 lety

      @@zproger спасибо! :)

  • @IvanTokarev-dp3ju
    @IvanTokarev-dp3ju Před 2 lety +5

    Астрологи объявили неделю мамкиных дудосеров

    • @zproger
      @zproger  Před 2 lety +1

      страшно

    • @b8b
      @b8b Před 2 lety

      Очень страшно

    • @b8b
      @b8b Před 2 lety

      Интересно если аналог этой штуки на php

  • @n1ret
    @n1ret Před 2 lety +1

    что возвращает grequest.get?

    • @zproger
      @zproger  Před 2 lety

      Объект grequests :)

    • @n1ret
      @n1ret Před 2 lety

      @@zproger тоесть он сам по себе не делает обращение к сайту?

  • @zombiecarbo4043
    @zombiecarbo4043 Před 2 lety

    Привет у меня такой вопрос во время когда я записываю команды в пайтон и допускаю ошибку я не могу стереть тот или иной символ что делать в такой ситуации?

  • @user-nx7cq1wy3f
    @user-nx7cq1wy3f Před 3 měsíci

    GIL так то не блокируют I/O задачи, так как пока ожидается ответ от сервера, то GIL освобождается

  • @MrDenChannel
    @MrDenChannel Před rokem +1

    А не подскажешь, что за тема PyCharm у тебя?

  • @illyamosiichuk670
    @illyamosiichuk670 Před 2 lety +1

    Го инструмент для дос-атак, чисто в научных целях)

    • @zproger
      @zproger  Před 2 lety +1

      Ютуб такое не любит :)

    • @archyt88
      @archyt88 Před 2 lety

      wrk , загугли)

    • @RenderDragon
      @RenderDragon Před 2 lety

      @@zproger а мы ему не скажем

  • @Happ1ness
    @Happ1ness Před 2 lety +2

    Альтернативное название ролика:
    "Делаем дудосер на python"

    • @zproger
      @zproger  Před 2 lety

      Не совсем :)))
      Тут всё таки запросы а не ддос

    • @Happ1ness
      @Happ1ness Před 2 lety

      @@zproger а частые запросы на сервер, разве не считаются ддосом?)

    • @veleg
      @veleg Před 2 lety

      @@Happ1ness нет

    • @Happ1ness
      @Happ1ness Před rokem

      @@veleg как раз считаются.
      Прикинь ты поставишь парсить 100 страниц.
      Вот тебе и 100 запросов в один момент)
      Чем не дудос?

  • @lexlex-nc7bq
    @lexlex-nc7bq Před 2 lety +1

    grequests - круто, конечно
    но почему не aiohttp ?

    • @zproger
      @zproger  Před 2 lety

      В видео говорил почему не aiohttp =)

  • @karandalliik
    @karandalliik Před rokem

    Классно.
    Прям щас нужно код в 10 раз минимум ускорить!!
    А по поводу порядка импорта grequests и requests - странно как то; ведь grequests берет библиотеку requests из папки venv или, возможно, изнутри себя и содержит определенную версию requests, а сама отдельная reqursts может быть любой версии.
    Да и обращение ведь происходит к методам через имя библиотеки.
    Переопределения тут никакого и не будет.
    В любом случае, сразу за тест.
    Очень нужно.
    Спасибо)

  • @user-so4lz3si3r
    @user-so4lz3si3r Před rokem

    Лично я использую модуль threading

  • @jackmoral9127
    @jackmoral9127 Před 2 lety +2

    фиг знает у меня httpx 2000+ запросов в секунду шлет нагрузив при этом только 1 логическое ядро.

    • @zproger
      @zproger  Před 2 lety

      httpx тоже крутой)

    • @MrOGWalk
      @MrOGWalk Před 2 lety

      А если сделать многоядерный ассинхронный парсер, такое возможно?) Допустим 8 ядер полностью нагрузить, и получить 16к запросов в секунду?

  • @Rizz_The_One
    @Rizz_The_One Před rokem

    Для чего это нужно?)

  • @nosaze
    @nosaze Před rokem +1

    мне кажется, или плохие люди будут делать dos и ddos атаки через такие скрипты :|

    • @zproger
      @zproger  Před rokem +1

      Вряд ли) Для таких атак надо знать побольше, чем просто import grequests)

  • @chinchita5532
    @chinchita5532 Před 2 lety +2

    Это просто ассинхронная обёртка на request, в двух словах

  • @Juravliik
    @Juravliik Před 2 lety +1

    а зачем нужно делать запросы на сайт?)

    • @user-hb1ug2fs3o
      @user-hb1ug2fs3o Před 2 lety +1

      Для парсинга, для досс атак и по мелочи

    • @zproger
      @zproger  Před 2 lety +2

      Автоматизация действий на сайте, работа с API, парсинг.
      На самом деле много чего можно сделать, на канале целых 2
      курса по парсингу, в которых подробно рассказывается об этом.

    • @Juravliik
      @Juravliik Před 2 lety

      @@zproger спасибо, посмотрю.

    • @Juravliik
      @Juravliik Před 2 lety

      @@user-hb1ug2fs3o спасибо)

  • @dmitryakol2535
    @dmitryakol2535 Před 2 lety +1

    100 запросов в секунду? Может быть 100 000 https запросов в секунду? Тут да, нужно подумать.
    Как нужно говнокодить, что бы 100 запросов в секунду сервак отдать не мог?

  • @maximpotrebko9010
    @maximpotrebko9010 Před 2 lety +1

    что это за редактор? или это какая-то кастомная тема PyCharm'a?

    • @zproger
      @zproger  Před 2 lety

      Обычный Pycharm с плагинами, на канале есть видео как сделать такой же интерфейс в Pycharm

  • @awdawdawdbfw
    @awdawdawdbfw Před 2 lety

    Получился бы тот же результат, если бы делал это же самое в 40-50 потоков обычным реквестом

    • @zproger
      @zproger  Před 2 lety

      Раньше тестировал с потоками и вроде как это не ускоряло выполнение,
      связано с тем, что в Python используется GIL. Когда нужно сделать выполнение
      параллельным обычно использую multiprocessing.

    • @awdawdawdbfw
      @awdawdawdbfw Před 2 lety

      @@zproger у меня есть проекты с подобной реализацией, можно добиться 150-200 запросов в секунду с помощью потоков. Как по мне асинхронность сильно переоценена в этом плане, т.к. там суть ровно такая же, пока выполняется один, скажем так поток в асинхронности, все остальные заблокированы, пока не будет IO операции

    • @user-bk8wg7hk2b
      @user-bk8wg7hk2b Před 2 lety

      @@awdawdawdbfw Ага, только в случае с асинхронностью ты не будешь занимать все потоки процессора.. но это же не важно, правильно?)

  • @lmaootakedh
    @lmaootakedh Před rokem

    grequests.map - это метод класса grequests а не функция

  • @user-jz9jv9nr2n
    @user-jz9jv9nr2n Před rokem +1

    У iohttp дока так себе

  • @Garry_Li
    @Garry_Li Před 2 lety +2

    4:51 что за кринж, по твоему если надо отправить 100000 запросов на один адрес то надо создать массив из 100000 строк? Это дичь какая-то, если этот гресквест только так работает то в топку его

    • @zproger
      @zproger  Před 2 lety

      Да, он так работает, потому что потом всё это передается в map, возможно есть и другие способы, но я показывал на примере документации

  • @archyt88
    @archyt88 Před 2 lety +4

    Интересно куда были отправлены 100 тысяч запросов? XD Я ни на что не намекаю..)

    • @zproger
      @zproger  Před 2 lety

      xD

    • @maldok4087
      @maldok4087 Před rokem

      Если честно мне кажется можно сделать бомбер, не так ли?

  • @luckytima2315
    @luckytima2315 Před 2 lety +1

    все еще zorin ))

  • @user-zx9el2ld7g
    @user-zx9el2ld7g Před 2 lety +2

    А aiohttp покинул чат?)

    • @zproger
      @zproger  Před 2 lety +1

      Сейчас да, но скоро вступит в чат и о нем будет отдельное видео

    • @omashune5546
      @omashune5546 Před 2 lety

      @@zproger о-о-о, будем ждать, будем ждать!

  • @finalapproach1254
    @finalapproach1254 Před 2 lety +2

    ["url"] * 100

    • @zproger
      @zproger  Před 2 lety

      Можно и так =)

    • @lev8569
      @lev8569 Před 2 lety

      хотел сам задушнить, но ты был первее)

  • @MasterSergius
    @MasterSergius Před 2 lety +1

    Заюзал grequest, получил бан от гугла

    • @zproger
      @zproger  Před 2 lety +1

      тоже самое

  • @Garry_Li
    @Garry_Li Před 2 lety +1

    9:22 неужели питон такой тупой язык где нельзя явно задать какую библиотеку использовать?

    • @zproger
      @zproger  Před 2 lety

      Конечно можно, тут дело не в этом, просто grequests пропатчит в памяти requests и он будет идентичный, тогда без разницы какую либу использовать, поведение будет одинаковое. Это не особенности языка, просто monkey patching создает такие костыли.

  • @VaeV1ct1s
    @VaeV1ct1s Před rokem

    Щас бы открывать 100к процессов для отправки запросов)))) 🤡

  • @QWSAFV
    @QWSAFV Před 2 lety +1

    Apache benchmark для слабых

  • @ternick
    @ternick Před 2 lety +2

    На сколько же тупо было сравнивать синхронный requests и grequests, если сам сказал, что 2 асинхронный. Сравнил бы скорость aiohttp и grequests. Бесполезное видео, сам собрал никому не нужную статистику, сам погладил себя по головке и ушёл =/
    Так же создавать массив из 100 ссылок, которые одинаковые так же тупо.

    • @zproger
      @zproger  Před 2 lety +1

      Потому что разница синхронного и асинхронного подхода всегда имеет значение.
      Никто никого не гладил, если бы я не сравнил скорость, Вы бы в комментариях написали что надо было её сравнить)
      А список на 100 ссылок создается не просто так, почитайте документацию Grequests, он работает по такому принципу, это не я придумал.

    • @ternick
      @ternick Před 2 lety +1

      @@zproger Так не работаеееет :D

    • @zproger
      @zproger  Před 2 lety

      А как работает?)
      Добавлю к этому, что бывают такие случаи, когда асинхронный подход медленней синхронного из-за реализации библиотеки. Не сравнить это было бы неправильно, в итоге я бы не смог четко сказать, что асинхронная версия работает быстрее, ведь я это утверждаю, но если бы не показал в видео, то какой смысл от этого :)
      Grequests создает объект, который потом переходит в map, ему нужно передавать итерируемый объект, все примеры из видео, это и примеры из офф.документации, просто они представлены более наглядно и с комментариями.

    • @ternick
      @ternick Před 2 lety

      @@zproger Ты почистил мои комменты, чисти дальше. Дальше пиши свой говнокод и сравнивай то, что никто не сравнивает.

    • @zproger
      @zproger  Před 2 lety +1

      Ничего я не чистил, не забывайте что ютуб автоматически кидает подозрительные комментарии на рассмотрение. Удачи)