запросов к API (или другие варианты)?
Мой случай: циклом for обрабатываю данные, в каждой итерации отправляю запрос к API для получения других данных. Можно это как-то ускорить?
P.S. обернул в таймер (декоратор) каждый такой запрос примерно занимает 0.2-0.5 сек, что очень много в сравнении с остальной логикой
Спасибо
Запросы к апи перпендикулярно мультипроцессингу
То есть процессинг лучше для требовательных к вычислениями функциям?
Да, он именно для этого и создан
Нет, но распараллеливание CPU-bound задач является одной из распространенных задач решаемых при помощи мультипроцессинга.
так это асинхронку надо делать, зачем же треадинг. В python-binance есть асинхронный клиент
А почему трединг не подходит? Я вот в аналогичной ситуации ThreadPoolExecutor использовал.
спасибо, threading решил вопрос
Не спорю можно и потоками и по ядрам раскидать. Но кмк отдельные потоки или процессы имеют смысл если есть чем их нагрузить, а если задача потока - тупо ждать json с бинанса то асинхронка в одном потоке логичнее, чем мутить пул тредов которые будут просто простаивать в ожидании ответа.
ну и........ пусть простаивает. Там же не while True: pass. Ос видит что поток бездействует и переводит его в саспенд (или как оно называется) и он не грузит систему.
Треды несколько медленнее асинхронки. Потому что какая-то изоляция все-таки происходит, а асинхронка насколько я знаю в одном потоке крутится и на поддержание потока ничего не тратится
> Не спорю можно и потоками и по ядрам раскидать. тут речь про IO-bound шла. и да, "раскидай" в общем случае. > логичнее чем принципиально логичнее? > Треды несколько медленнее асинхронки. зачастую наоборот. > Потому что какая-то изоляция все-таки происходит букварь по системному программированию живо 🤦♂️
Я не глубоко знаю тему но интересно послушать мнения. Что касается логики, то мне не ясно как многопоточность ускорит получение ответов на http-запросы? Ну засунули блокирующую операцию не в корутину а в поток, ну перебирает образно gil эти потоки и что? в свой cpu мы же никак не упираемся. Или что i/o поток быстрее достучиться до gil чем eventloop получит результат из корутины?
1. GIL отпускается на IO операциях 2. ты можешь создать 10 потоков, и они дружно будут ждать пока не приедут ответы. 3. > то мне не ясно как многопоточность ускорит получение ответов на http-запросы тем что вместо последовательного выполнения 10 запросов в одном потоке, ты отправлил сразу N (каждый в своем потоке) и ждешь ответ.
google://кооперативная vs вытесняющая многозадачность
Асинхронный код сложно расширять и поддерживать, да и к тому же намутить минимальное решение
Трединг в питоне это вытесняющая многозадачность, решение о передаче управления делает ось
Обсуждают сегодня