Многопоточность позволяет выполнять несколько потоков (независимых последовательностей выполнения) в рамках одного процесса. Это полезно для задач, где есть ожидание ввода/вывода (например, чтение из файла, сетевые запросы), так как потоки могут переключаться, пока один поток ожидает.
В Python многопоточность реализуется модулем threading.
python
| Компонент | Описание |
|---|---|
Thread | Класс для создания нового потока |
target | Функция, которая будет выполнена в потоке |
args | Кортеж аргументов для функции target |
start() | Запуск выполнения потока |
join() | Ожидание завершения выполнения потока |
Однако в Python есть Global Interpreter Lock (GIL). GIL - это мьютекс, который защищает доступ к объектам Python, предотвращая выполнение нескольких нативных, не I/O-блокирующих операций (CPU-bound) потоков одновременно. Это означает, что при выполнении задач, интенсивно использующих процессор, многопоточность в Python не приведет к параллельному выполнению на многоядерных процессорах. Для таких задач чаще используют multiprocessing, который создает отдельные процессы.
GIL не влияет на потоки, которые ожидают операций ввода/вывода, так как GIL отпускается во время ожидания. Поэтому многопоточность эффективна для I/O-связанных задач.