Python Thread Multiprocessing asyncio
Подскажите когда использовать threads, multiprocessing и asyncio? В каких задачах?
Ответы (1 шт):
asyncio и threads используется для задач ввода ввывода. Сетевого, дискового, для общения с медленными программами. Когда нужно обрабатывать очень большое количество соединений лучше подходит асинкио. Треды удобней для взаимодействия с пользователем.
Разница тредов и асинкио в том что asyncio переключает функцию на слове await, а остальные асинхронные функции ставит в очередь, а треды запускаются сразу (кушает больше ресурсов) и их переключает gil в произвольном месте. Тоесть асинхронные функции выполняются по очереди - не параллельно. Асинкио позволяет выполнить другие задачи пока относительно медленное соединение передает данные, когда данные пришли - возвращается к их обработке.
Простой сервер:
принял-скачал-обработал-выгрузил-принял-скачал-обработал-выгрузил
Сервер на тредах:
принял-принял-скачалоба-обработал-обработал-выгрузилоба
Сервер на асинкио:
принял1 - пока качается 1 принял 2 и начал качать2-пока качается 2 обработал1 - пока выгружается 1 обрабатывается 2 - выгружается 2
multiprocessing используется для задачек, где грузится процессор сильнее чем ввод-вывод. Минусом мультипроцессинга является потребление ресурсов для запуска новых процессов и накладные расходы для передачи данных между процессами.
Для задачек где есть много соединений и обработка данных используй asyncio и processpoolexecutor.