Что такое многопоточность (Threading) и как она работает в Python?
Ответ от нейросети
sobes.tech AI
Многопоточность позволяет выполнять несколько потоков (независимых последовательностей выполнения) в рамках одного процесса. Это полезно для задач, где есть ожидание ввода/вывода (например, чтение из файла, сетевые запросы), так как потоки могут переключаться, пока один поток ожидает.
В Python многопоточность реализуется модулем threading.
import threading
import time
def worker(num):
"""Функция рабочего потока"""
print(f'Поток {num} стартовал.')
time.sleep(1) # Имитация работы
print(f'Поток {num} завершился.')
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,)) # Создание потока
threads.append(t)
t.start() # Запуск потока
for t in threads:
t.join() # Ожидание завершения потока
print('Все потоки завершены.')
| Компонент | Описание |
|---|---|
Thread |
Класс для создания нового потока |
target |
Функция, которая будет выполнена в потоке |
args |
Кортеж аргументов для функции target |
start() |
Запуск выполнения потока |
join() |
Ожидание завершения выполнения потока |
Однако в Python есть Global Interpreter Lock (GIL). GIL - это мьютекс, который защищает доступ к объектам Python, предотвращая выполнение нескольких нативных, не I/O-блокирующих операций (CPU-bound) потоков одновременно. Это означает, что при выполнении задач, интенсивно использующих процессор, многопоточность в Python не приведет к параллельному выполнению на многоядерных процессорах. Для таких задач чаще используют multiprocessing, который создает отдельные процессы.
GIL не влияет на потоки, которые ожидают операций ввода/вывода, так как GIL отпускается во время ожидания. Поэтому многопоточность эффективна для I/O-связанных задач.