#7 - Многопоточность vs Async
Видеоурок
Асинхронное программирование и многопоточность решают одну задачу — выполнение нескольких операций без блокировки программы, но делают это по-разному. Понимание этой разницы критически важно для выбора правильного подхода.
Многопоточность (threading) использует несколько потоков внутри одного процесса. Это создаёт ощущение параллельной работы, однако в Python есть ограничение — GIL (Global Interpreter Lock). Он не позволяет одновременно выполнять Python-код в нескольких потоках, из-за чего многопоточность плохо подходит для тяжёлых вычислений.
Тем не менее, threading эффективен в задачах с ожиданием: работа с сетью, файлами или API. Пока один поток ждёт, другой может выполняться, что даёт ускорение.
Асинхронное программирование работает иначе. Здесь используется один поток и цикл событий (event loop), который переключается между задачами в моменты ожидания. Благодаря этому можно выполнять множество операций без создания потоков, что делает код более лёгким и масштабируемым.
В async задачи могут завершаться не по порядку. Например, если одна задача ждёт 2 секунды, а другая — 1 секунду, вторая завершится раньше, даже если была запущена позже. Это ключевая особенность асинхронного подхода.
Выбор зависит от задачи: async лучше подходит для I/O (запросы, базы, боты), threading — когда нельзя использовать async. Для вычислительно сложных задач стоит использовать multiprocessing, так как он обходит ограничения GIL.
Материалы для курса
Чтобы скачивать материалы к видеокурсам необходимо оформить подписку на сайт
Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть