Sobes.tech
Junior
102
questionbank

Что такое многопоточность (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-связанных задач.