PYPROGLIB Telegram 6876
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



tgoop.com/pyproglib/6876
Create:
Last 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 сек

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

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

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




Share with your friend now:
tgoop.com/pyproglib/6876

View MORE
Open in Telegram


Telegram News

Date: |

With the “Bear Market Screaming Therapy Group,” we’ve now transcended language. 4How to customize a Telegram channel? Today, we will address Telegram channels and how to use them for maximum benefit. On June 7, Perekopsky met with Brazilian President Jair Bolsonaro, an avid user of the platform. According to the firm's VP, the main subject of the meeting was "freedom of expression." Add up to 50 administrators
from us


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