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

Всем привет. Когда лучше threading, а когда multiprocessing для "ускорения"

запросов к API (или другие варианты)?

Мой случай: циклом for обрабатываю данные, в каждой итерации отправляю запрос к API для получения других данных. Можно это как-то ускорить?

P.S. обернул в таймер (декоратор) каждый такой запрос примерно занимает 0.2-0.5 сек, что очень много в сравнении с остальной логикой
Спасибо

16 ответов

16 просмотров

Запросы к апи перпендикулярно мультипроцессингу

Andrey- Автор вопроса
Kirill Shikhalev
Запросы к апи перпендикулярно мультипроцессингу

То есть процессинг лучше для требовательных к вычислениями функциям?

Kirill Shikhalev
Да, он именно для этого и создан

Нет, но распараллеливание CPU-bound задач является одной из распространенных задач решаемых при помощи мультипроцессинга.

так это асинхронку надо делать, зачем же треадинг. В python-binance есть асинхронный клиент

Noname
так это асинхронку надо делать, зачем же треадинг....

А почему трединг не подходит? Я вот в аналогичной ситуации ThreadPoolExecutor использовал.

Andrey- Автор вопроса
Alex
А почему трединг не подходит? Я вот в аналогичной ...

Не спорю можно и потоками и по ядрам раскидать. Но кмк отдельные потоки или процессы имеют смысл если есть чем их нагрузить, а если задача потока - тупо ждать json с бинанса то асинхронка в одном потоке логичнее, чем мутить пул тредов которые будут просто простаивать в ожидании ответа.

Noname
Не спорю можно и потоками и по ядрам раскидать. Но...

ну и........ пусть простаивает. Там же не while True: pass. Ос видит что поток бездействует и переводит его в саспенд (или как оно называется) и он не грузит систему.

Alex
А почему трединг не подходит? Я вот в аналогичной ...

Треды несколько медленнее асинхронки. Потому что какая-то изоляция все-таки происходит, а асинхронка насколько я знаю в одном потоке крутится и на поддержание потока ничего не тратится

Noname
Не спорю можно и потоками и по ядрам раскидать. Но...

> Не спорю можно и потоками и по ядрам раскидать. тут речь про IO-bound шла. и да, "раскидай" в общем случае. > логичнее чем принципиально логичнее? > Треды несколько медленнее асинхронки. зачастую наоборот. > Потому что какая-то изоляция все-таки происходит букварь по системному программированию живо 🤦‍♂️

Alex
> Не спорю можно и потоками и по ядрам раскидать. ...

Я не глубоко знаю тему но интересно послушать мнения. Что касается логики, то мне не ясно как многопоточность ускорит получение ответов на http-запросы? Ну засунули блокирующую операцию не в корутину а в поток, ну перебирает образно gil эти потоки и что? в свой cpu мы же никак не упираемся. Или что i/o поток быстрее достучиться до gil чем eventloop получит результат из корутины?

Noname
Я не глубоко знаю тему но интересно послушать мнен...

1. GIL отпускается на IO операциях 2. ты можешь создать 10 потоков, и они дружно будут ждать пока не приедут ответы. 3. > то мне не ясно как многопоточность ускорит получение ответов на http-запросы тем что вместо последовательного выполнения 10 запросов в одном потоке, ты отправлил сразу N (каждый в своем потоке) и ждешь ответ.

Noname
Я не глубоко знаю тему но интересно послушать мнен...

google://кооперативная vs вытесняющая многозадачность

Noname
так это асинхронку надо делать, зачем же треадинг....

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

Noname
Я не глубоко знаю тему но интересно послушать мнен...

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
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
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта