Глобальная блокировка интерпретатора (GIL) в CPython — это механизм, который обеспечивает безопасную работу с потоками. 1 Он предотвращает одновременное выполнение байт-кодов Python несколькими собственными потоками. 2
Работа GIL следующая: прежде чем какой-то код выполняется в своём цикле вычисления кадра, GIL блокируется его потоком. 4 По окончанию выполнения конкретного кода операции GIL высвобождается. 4 Это означает, что в любой заданный момент времени только один поток способен исполнять некую операцию байт-кода. 4
Чтобы позволить другому потоку выполнить код, когда поток, удерживающий GIL, ожидает выполнения операции ввода/вывода, в CPython все операции ввода/вывода реализованы с использованием паттерна «освобождение-выполнение-захват»: 1
Также некоторые модули расширения, как стандартные, так и сторонних производителей, разработаны таким образом, чтобы освобождать GIL при выполнении задач с высокой вычислительной нагрузкой, таких как сжатие или хеширование. 2 Кроме того, GIL всегда освобождается при выполнении ввода-вывода. 2