Марк Шеннон и Даниэле Пармеджани опубликовали PEP 805 «Safe Parallel Python»: параллелизм в CPython без гонок по умолчанию. Целевая версия 3.16, статус Draft.
🔘 Каждый объект получает атрибут
🔘 Классы, функции и модули создаются Local. Замыкание, меняющее
🔘 Добавляются
🔘 Мотив: PEP 703 даёт параллелизм, но допускает гонки, а PEP 734 безопасен, но объекты между интерпретаторами без копирования не передать. Без чего-то подобного, считают авторы, две сборки CPython останутся навсегда.
@zen_of_python
__shareable__ только на чтение, со значением Immutable, Local, Protected или Synchronized. Контролируется доступ к объекту, а не отдельные операции: проверка нужна лишь при создании ссылки потока из ссылки в куче.nonlocal, останется Local, и передача его в чужую группу потоков даст IllegalThreadAccessException.SynchronizedList, SynchronizedDict и SynchronizedSet; sys.modules станет первым, sys.path — вторым. Авторы предупреждают: эти классы защищают объект от порчи, но потокобезопасности не дают.@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
Дескрипторы — та часть объектной модели Python, которую большинство использует каждый день, не зная названия. Официальное руководство Раймонда Хеттингера объясняет её по шагам и остаётся живой документацией, а не архивом.
Протокол состоит из трёх методов:
🔘
🔘 обычная функция становится связанным методом ровно потому, что функция — тоже дескриптор;
🔘
🔘 разница между дескрипторами с записью и без определяет, кто победит: дескриптор или словарь экземпляра;
🔘 на этом же построены
Практическая часть — готовый класс
@zen_of_python
Протокол состоит из трёх методов:
__get__, __set__ и __delete__. Класс, реализующий их, перехватывает доступ к атрибуту. Из этого собрано больше, чем кажется:property, staticmethod, classmethod и super() — всё это дескрипторы, и в руководстве показаны их упрощённые реализации на Python;__set_name__ позволяет дескриптору узнать имя атрибута, под которым его объявили;__slots__ и модели в ORM.Практическая часть — готовый класс
Validator и валидаторы OneOf, Number и String: проверка типов и диапазонов при присваивании, без единой строчки проверок в коде, который этими полями пользуется.@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM