Python Glossary English

все Python 3threadingпонятие

GIL

концепции

Global Interpreter Lock — мьютекс CPython, позволяющий только одному потоку выполнять байт-код одновременно. Блокирует параллелизм CPU-задач, но не мешает I/O-операциям.

Синтаксис

# GIL — концепция, не синтаксис

GIL не делает твой код потокобезопасным: составные операции (проверил-потом-изменил, counter += 1) всё равно гонятся между потоками, так что Lock по-прежнему обязателен. С Python 3.13 есть free-threaded сборка (PEP 703), где GIL можно отключить: в 3.13 экспериментальная, с 3.14 официально поддерживаемая (PEP 779), но необязательная, но в обычной сборке он на месте.

Примеры

# GIL мешает CPU-задачам: два потока не быстрее одного
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
import multiprocessing
def cpu_task(n):
    return sum(range(n))
if __name__ == '__main__':  # обязательно: процессы-помощники заново импортируют модуль
    with ThreadPoolExecutor() as ex:   # потоки: байт-код исполняет один поток за раз
        print(sum(ex.map(cpu_task, [10**6] * 4)))  # → 1999998000000
    with ProcessPoolExecutor(mp_context=multiprocessing.get_context('spawn')) as ex:  # процессы: у каждого свой интерпретатор и свой GIL
        print(sum(ex.map(cpu_task, [10**6] * 4)))  # → 1999998000000

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности