Sobes.tech
Назад к вопросам
Junior — Middle
70

Как механизмы взаимодействия потоков и GIL влияют на параллельное выполнение кода в Python?

Ответ от нейросети

sobes.tech AI

В Python существует механизм GIL (Global Interpreter Lock) — глобальная блокировка интерпретатора, которая позволяет одновременно исполнять байт-код Python только в одном потоке. Это означает, что даже если у вас несколько потоков, они не смогут одновременно выполнять Python-код параллельно на нескольких ядрах процессора.

Потоки в Python полезны для задач ввода-вывода (например, сетевые операции, чтение файлов), где поток может ожидать завершения операции, освобождая GIL для других потоков. Но для CPU-интенсивных задач многопоточность не даст прироста производительности из-за GIL.

Для настоящей параллельной обработки CPU-интенсивных задач в Python обычно используют модуль multiprocessing, который запускает несколько процессов, каждый со своим интерпретатором и памятью, обходя ограничение GIL.

Пример использования потоков для I/O:

import threading
import time

def io_task():
    time.sleep(1)  # имитация операции ввода-вывода
    print("I/O задача завершена")

threads = [threading.Thread(target=io_task) for _ in range(5)]
for t in threads:
    t.start()
for t in threads:
    t.join()

Для CPU-задач лучше multiprocessing:

from multiprocessing import Pool

def cpu_task(x):
    return x * x

with Pool(4) as p:
    print(p.map(cpu_task, range(10)))