170 похожих чатов

Привет. делаю запросы на сервер. API устроен так, что я

должен передавать серверу page, если сервер вернул "response": [], то мне нужно прекратить выполнение цикла. Я только додумался выполнять asyncio.gather(), чтобы получить результат запроса и сделать условие. Но тогда программа выполняется на полсекунды медленнее, чем если захардкордить range до значений, где точно будет не пустой ответ. Есть ли варианты как увеличить скорость выполнения? https://pastebin.com/vPNhB7N1

24 ответов

25 просмотров

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

Меня смущает вызов два раза. asyncio.gather вроде выполняет переданные корутины. По сути ты выполняешь запросы отдельно на 9 строке и потом еще раз все запросы конкурентно в 13

Получается код на строках 5-11 работает синхронно

Phantasm
ему вообще gather не нужен в этой задаче

Если известно количество page заранее, то можно

0 days without accident
Если известно количество page заранее, то можно

у него решение отправлять запрос зависит от результатотв предыдущего запроса, зачем тут gather

Phantasm
у него решение отправлять запрос зависит от резуль...

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

0 days without accident
В коде это не заметно, если нужно из запроса в зап...

что? нет, он чекает результат запроса. если результат пустой, то запросы прекращаются, о каких ренджах речь

Phantasm
что? нет, он чекает результат запроса. если резуль...

Если примерно известно количество страниц, то условно можно ускорить запрашивая по группам. Допустим по 10-20 страниц в таске. Если возвращается пустая страница - заканчиваем таску.

он не знает кол-во страниц, + при таком подходе будут отправляться лишние запросы и нагружать сервис

печень- Автор вопроса
0 days without accident
Меня смущает вызов два раза. asyncio.gather вроде ...

Да, я даже не подумал об этом. Убрал из 13 строки, но скорость +- одинаковая. gather в цикле много времени занимает всё же

Phantasm
он не знает кол-во страниц, + при таком подходе бу...

Ну тогда последовательно только. Да и лишних запросов будет не так много - по колличеству групп максимум. Если сервис развалиться от нескольких лишних сообщений, то это печально.

0 days without accident
Ну тогда последовательно только. Да и лишних запро...

я думаю должно быть предусмотрено что то типо items_by_page при вызове api

печень- Автор вопроса
Phantasm
ты знаешь вообще зачем gather нужен?

я читал статью, в которой использовался этот код, сравнил - стало лучше. Но до этого я просто использовал requests и всё. https://www.twilio.com/blog/asynchronous-http-requests-in-python-with-aiohttp

печень
Да, я даже не подумал об этом. Убрал из 13 строки,...

Есть документация API в которую ты стучишься? Может с ней что-то конкретное получится посоветовать

печень
я читал статью, в которой использовался этот код, ...

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

печень- Автор вопроса
печень- Автор вопроса
Phantasm
gather нужен когда тебе надо несколько корутин вып...

то есть просто await some_func() будет лучше?

печень
сервис полный шлак, к большому сожалению

Тогда если тебе не известно сколько страниц и сервис хреновый, то нет большого смысла запрашивать асихронно, так как есть шанс положить его. Особенно без рейт лиметера и ретраев.

печень- Автор вопроса
печень
то есть просто await some_func() будет лучше?

я бы как то так сделал https://pastebin.com/eVytLcTz

печень
он и синхронно падает через раз xD

Тогда синронно с exponential backoff ретраями. Быстро не выдет

Phantasm
я бы как то так сделал https://pastebin.com/eVytLc...

Это же по сути синхронный код, который в асихнроном коде может быть вызван

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта