tgoop.com/pyproglib/6923
Create:
Last Update:
Last Update:
Большой шаг для Python-разработчиков:
С релизом Python 3.14, свободнопоточная сборка CPython (free-threaded build) официально поддерживается и больше не является экспериментальной.
📌 Это означает:
— Реальная многопоточность без GIL.
— Free-threaded Python — поддерживаемая, но пока опциональная сборка.
— Это фаза II. Переход к GIL-free по умолчанию — дело будущего.
👉 PEP 779: Free-threaded CPython
📌 Пример: сравнение GIL vs Free-threaded
Запуск CPU-bound задачи в двух потоках:
from concurrent.futures import ThreadPoolExecutor
import time
def cpu_bound_task():
start = time.time()
sum(1 for _ in range(10**7))
end = time.time()
print(f"Finished in {end - start:.2f} seconds")
with ThreadPoolExecutor() as e:
e.submit(cpu_bound_task)
e.submit(cpu_bound_task)
Результат:
$ uv run -p 3.14 a.py
Finished in 1.01 seconds
Finished in 1.02 seconds
$ uv run -p 3.14.0b3+freethreaded a.py
Finished in 0.49 seconds
Finished in 0.51 seconds
> Потоки реально работают параллельно — ускорение почти в 2 раза!
📌 Но не всё так просто
Попытка работать с общими объектами (например, добавлять в список) может замедлить код:
# Вставка элемента в общий список
shared = []
def task():
for i in range(10**5):
shared.append(i)
Результат:
$ uv run -p 3.14 a.py
Finished in 0.10 seconds
Finished in 0.11 seconds
172214
$ uv run -p 3.14.0b3+freethreaded a.py
Finished in 0.48 seconds
Finished in 0.49 seconds
1865
> Без GIL нужна синхронизация, иначе возможны конфликты и деградация производительности.
📌 Выводы
— Python наконец-то движется к реальной многопоточности.
— Free-threaded CPython уже работает — и может ускорить CPU-bound задачи.
— Не забывайте: работа с общими объектами требует явной синхронизации (даже с GIL). Потокобезопасность — ваша ответственность.
Библиотека питониста #свежак