Улучшенное использование памяти, субинтерпретаторы и адаптивные инструкции повышают производительность Python

Python 3.12 был выпущен 6 мая 2023 г. с повышенными показателями скорости и эффективности. На недавнем мероприятии PyCon в Солт-Лейк-Сити, штат Юта, основные разработчики представили улучшения, в том числе сокращение использования памяти, увеличение скорости интерпретатора и оптимизацию компиляции для более эффективного кода. Одним из улучшений является реализация подинтерпретаторов, механизма, который позволяет нескольким интерпретаторам работать вместе в рамках одного процесса. Хотя субинтерпретаторы были доступны в течение некоторого времени, они не были легко доступны для конечного пользователя из-за запутанного состояния внутренних компонентов Python. В Python 3.12 основной разработчик Эрик Сноу и его команда достаточно очистили внутренние компоненты, чтобы сделать субинтерпретаторы более полезными. Они также добавили в стандартную библиотеку новый модуль под названием «интерпретаторы», который предоставляет программистам базовый способ запуска субинтерпретаторов и выполнения на них кода.

Эксперименты Сноу с субинтерпретаторами показали, что они превосходят многопоточность и многопроцессорность. Например, простая веб-служба, которая выполняла некоторую работу, связанную с ЦП, достигла максимальной скорости 100 запросов в секунду с потоками и 600 с многопроцессорной обработкой, но с субинтерпретаторами она выдала 11 500 запросов практически без потерь при масштабировании от одного клиента. Модуль интерпретаторов в настоящее время имеет ограниченную функциональность и не имеет механизмов для обмена состоянием между субинтерпретаторами, но Сноу считает, что в Python 3.13 будет добавлено больше функций. А пока разработчикам предлагается экспериментировать.

Python 3.11 представил интерпретатору новые байт-коды, называемые адаптивными инструкциями, которые могут быть автоматически заменены во время выполнения версиями, специализированными для данного типа Python. Этот процесс, называемый ускорением, ускоряет весь процесс, избавляя интерпретатор от необходимости искать типы объектов. Python 3.12 имеет более адаптивные коды операций специализации, а заголовки объектов теперь занимают всего 96 байт, что чуть меньше половины того, что было раньше.

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .