Русский
Открыть в Telegram

Пост 🐍 Free-threaded Python убрал GIL, но NumPy всё равно упирался во внутренние блокировки

6 августа 2026
📚
📚Python Books
Фотография
🐍 Free-threaded Python убрал GIL, но NumPy всё равно упирался во внутренние блокировки Казалось бы, Python 3.13+ без GIL должен позволить нескольким потокам одновременно выполнять численные операции. Но на практике параллельные ufunc начинали конкурировать за внутренние структуры NumPy, счётчики ссылок и выделение памяти. В NumPy 2.5 разработчики устранили несколько ключевых узких мест: - таблицу диспетчеризации ufunc заменили на lock-free concurrent hash map; - часть общих служебных объектов сделали «бессмертными», снизив конкуренцию при подсчёте ссылок; - выделение памяти перевели на PyMem_RawMalloc и PyMem_RawFree. Теперь независимые операции можно масштабировать обычными потоками: from concurrent.futures import ThreadPoolExecutor import numpy as np arrays = [ np.random.rand(5_000_000) for _ in range(8) ] with ThreadPoolExecutor(max_workers=8) as pool: results = list(pool.map(np.sin, arrays)) Главное преимущество перед multiprocessing - массивы не нужно сериализовать и копировать между процессами. Потоки работают в одном адресном пространстве, поэтому могут эффективнее использовать многоядерный CPU и общую память. Но есть важная оговорка: free-threaded не означает автоматически thread-safe. Одновременное изменение одного ndarray из нескольких потоков всё ещё может привести к гонкам, повреждённым данным и падению интерпретатора. Безопаснее использовать: - отдельный массив для каждого worker; - общий массив только для чтения; - явную синхронизацию при записи. Удалить GIL оказалось недостаточно. Чтобы Python действительно масштабировался по ядрам, пришлось перепроектировать и внутренности NumPy. Подробнее: https://labs.quansight.org/blog/scaling-numpy-on-free-threaded-python
12 · 6K ·

Рядом в ленте

📚📚Python Books🔴 Завтра тестовое собеседование на Middle Python с разработчиком из Авито Уже завтра вечером в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посм📚📚Python Books🐍 Как правильно запускать внешние команды из Python Для большинства задач не нужны os.system() или низкоуровневый Popen. Достаточно subprocess.run() - он запуск
это сообщение
📚📚Python Books📚 Бесплатный 348-страничный учебник по Machine Learning для инженеров и исследователей Machine Learning: A First Course for Engineers and Scientists - полноценн📚📚Python Books🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку Окружение решает больше, чем кажется. Собрал папки и каналы, где можно быстрее влиться в нужное направлен
📚📚Python Books📚Python Books@pythonlbooks · канал · Технологии
33 204подписчиков1 192средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем