TG Telegram Group & Channel
Библиотека питониста | Python, Django, Flask | United States America (US)
Create: Update:

Python без GIL: эпоха настоящего многопоточного исполнения

GIL — удобное решение для безопасности, но стало тормозом.
— Guido van Rossum


✳️ Что такое GIL

GIL (Global Interpreter Lock) — глобальная блокировка интерпретатора Python. Она не даёт выполнять Python-байткод более чем одному потоку одновременно.

Это решение появилось ещё в 90-х, когда одноядерные процессоры были нормой. Сейчас же — реальность многопоточная. А GIL мешает полностью использовать многозадачность на уровне CPU.

✳️ Почему GIL — проблема

Из-за GIL Python-программы не могут полноценно использовать многопоточность в CPU-bound задачах. Вместо этого:
— мы используем multiprocessing, создавая отдельные процессы (дорого)
— мы прибегаем к C-библиотекам: NumPy, Cython, PyTorch, чтобы обойти ограничения

Но всё это — костыли. И комьюнити давно мечтает избавиться от GIL.

✳️ PEP 703: решение пришло

PEP 703 предлагает сделать GIL опциональным.

Вместо полного отказа от GIL — аккуратный переход:

1. Python 3.13 (вышел в 2024) — можно собрать без GIL (--disable-gil)
2. 2026–2027 — возможность переключения GIL в рантайме
3. 2028+ — по умолчанию Python будет без GIL

✳️ Как попробовать Python без GIL прямо сейчас (Mac)

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 сек

✔️ Разница очевидна. Многопоточность наконец-то работает по-настоящему.

Библиотека питониста #буст

Python без GIL: эпоха настоящего многопоточного исполнения

GIL — удобное решение для безопасности, но стало тормозом.
— Guido van Rossum


✳️ Что такое GIL

GIL (Global Interpreter Lock) — глобальная блокировка интерпретатора Python. Она не даёт выполнять Python-байткод более чем одному потоку одновременно.

Это решение появилось ещё в 90-х, когда одноядерные процессоры были нормой. Сейчас же — реальность многопоточная. А GIL мешает полностью использовать многозадачность на уровне CPU.

✳️ Почему GIL — проблема

Из-за GIL Python-программы не могут полноценно использовать многопоточность в CPU-bound задачах. Вместо этого:
— мы используем multiprocessing, создавая отдельные процессы (дорого)
— мы прибегаем к C-библиотекам: NumPy, Cython, PyTorch, чтобы обойти ограничения

Но всё это — костыли. И комьюнити давно мечтает избавиться от GIL.

✳️ PEP 703: решение пришло

PEP 703 предлагает сделать GIL опциональным.

Вместо полного отказа от GIL — аккуратный переход:

1. Python 3.13 (вышел в 2024) — можно собрать без GIL (--disable-gil)
2. 2026–2027 — возможность переключения GIL в рантайме
3. 2028+ — по умолчанию Python будет без GIL

✳️ Как попробовать Python без GIL прямо сейчас (Mac)

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 сек

✔️ Разница очевидна. Многопоточность наконец-то работает по-настоящему.

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
21👍8🔥51


>>Click here to continue<<

Библиотека питониста | Python, Django, Flask






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)