Python Thread Multiprocessing asyncio

Подскажите когда использовать threads, multiprocessing и asyncio? В каких задачах?


Ответы (1 шт):

Автор решения: eri

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

Разница тредов и асинкио в том что asyncio переключает функцию на слове await, а остальные асинхронные функции ставит в очередь, а треды запускаются сразу (кушает больше ресурсов) и их переключает gil в произвольном месте. Тоесть асинхронные функции выполняются по очереди - не параллельно. Асинкио позволяет выполнить другие задачи пока относительно медленное соединение передает данные, когда данные пришли - возвращается к их обработке.

Простой сервер:

принял-скачал-обработал-выгрузил-принял-скачал-обработал-выгрузил

Сервер на тредах:

принял-принял-скачалоба-обработал-обработал-выгрузилоба

Сервер на асинкио:

принял1 - пока качается 1 принял 2 и начал качать2-пока качается 2 обработал1 - пока выгружается 1 обрабатывается 2 - выгружается 2

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

Для задачек где есть много соединений и обработка данных используй asyncio и processpoolexecutor.

→ Ссылка