tgoop.com/pyproglib/6876
Create:
Last Update:
Last Update:
GIL — удобное решение для безопасности, но стало тормозом.
— Guido van Rossum
GIL (Global Interpreter Lock) — глобальная блокировка интерпретатора Python. Она не даёт выполнять Python-байткод более чем одному потоку одновременно.
Это решение появилось ещё в 90-х, когда одноядерные процессоры были нормой. Сейчас же — реальность многопоточная. А GIL мешает полностью использовать многозадачность на уровне CPU.
Из-за GIL Python-программы не могут полноценно использовать многопоточность в CPU-bound задачах. Вместо этого:
— мы используем
multiprocessing
, создавая отдельные процессы (дорого)— мы прибегаем к C-библиотекам: NumPy, Cython, PyTorch, чтобы обойти ограничения
Но всё это — костыли. И комьюнити давно мечтает избавиться от GIL.
PEP 703 предлагает сделать GIL опциональным.
Вместо полного отказа от GIL — аккуратный переход:
1. Python 3.13 (вышел в 2024) — можно собрать без GIL (
--disable-gil
)2. 2026–2027 — возможность переключения GIL в рантайме
3. 2028+ — по умолчанию Python будет без GIL
1. Скачайте установщик Python 3.13 с офсайта
2. На этапе установки выберите Free-threaded Python (experimental)
3. После установки появятся два интерпретатора:
—
python3.13
— обычный—
python3.13t
— Python без GILПроверьте:
import sysconfig
print(sysconfig.get_config_var("Py_GIL_DISABLED"))
# True для python3.13t
Пример CPU-bound задачи с потоками:
import threading, time
def cpu_task(n):
s = 0
for i in range(n): s += i*i
N = 100_000_000
def run():
threads = [threading.Thread(target=cpu_task, args=(N,)) for _ in range(4)]
start = time.time()
for t in threads: t.start()
for t in threads: t.join()
print(f'{time.time() - start:.2f} сек')
run()
— Python 3.13:
~13.5 сек
— Python 3.13t (без GIL):
~3.7 сек
Библиотека питониста #буст