Что делать, если нужно сериализовать данные, которые не поддерживаются стандартным модулем json?
Если нужно сериализовать объекты, которые по умолчанию не поддерживаются модулем json, то есть несколько вариантов:
— Реализовать методы
— Использовать декоратор dataclass из модуля dataclasses для автоматической генерации методов сериализации.
— Создать собственный класс-наследник json.JSONEncoder и переопределить метод
— Использовать библиотеку marshmallow для создания схем сериализации/десериализации сложных объектов в JSON.
— Преобразовать объекты в
— Использовать другой формат сериализации, например YAML или MessagePack, который может поддерживать произвольные типы.
👉@BookPython
Если нужно сериализовать объекты, которые по умолчанию не поддерживаются модулем json, то есть несколько вариантов:
— Реализовать методы
__getattr__
и __setattr__
в классе объекта, чтобы преобразовать его в словарь, который уже можно сериализовать в JSON.— Использовать декоратор dataclass из модуля dataclasses для автоматической генерации методов сериализации.
— Создать собственный класс-наследник json.JSONEncoder и переопределить метод
default()
, чтобы указать как сериализовать нестандартные объекты.— Использовать библиотеку marshmallow для создания схем сериализации/десериализации сложных объектов в JSON.
— Преобразовать объекты в
dict
или list
вручную перед сериализацией с помощью методов объекта или отражения (reflection).— Использовать другой формат сериализации, например YAML или MessagePack, который может поддерживать произвольные типы.
👉@BookPython
Для более сложной стилизации вы можете использовать seaborn, который предоставляет больше эстетических возможностей.
👉@BookPython
👉@BookPython
Emot
Библиотека Emot предназначена для распознавания эмодзи в тексте.
Она может очень пригодиться, когда нам нужно предварительно обработать текстовые данные, чтобы удалить эмотиконы и эмодзи или изучить их влияние на семантику. Функции библиотеки принимают на вход строку и возвращают список словарей.
👉@BookPython
Библиотека Emot предназначена для распознавания эмодзи в тексте.
Она может очень пригодиться, когда нам нужно предварительно обработать текстовые данные, чтобы удалить эмотиконы и эмодзи или изучить их влияние на семантику. Функции библиотеки принимают на вход строку и возвращают список словарей.
👉@BookPython
Что такое списковое включение?
Это компактный способ обработки всех или части элементов в последовательности и возвращения списка с результатами. Синтаксис прост и в то же время эффективен.
👉@BookPython
Это компактный способ обработки всех или части элементов в последовательности и возвращения списка с результатами. Синтаксис прост и в то же время эффективен.
👉@BookPython
Как мы версию Sanic’а повышали
Приветствую всех читателей, меня зовут Вадим, я — бэкенд-разработчик в компании Домклик. Я работаю в команде, которая разрабатывает CRM-систему для подготовки и осуществления ипотечных сделок. В этой статье я хотел бы поделиться своим интересным опытом мажорного повышения зависимостей в проекте, который свыше пяти лет находится в проде под ежедневной нагрузкой более 2000 RPS.
Предыстория
Итак, все сервисы нашей команды на бэке написаны на Python, большинство из них — с использованием фреймворка Sanic. До момента, приведшего впоследствии к этой статье, никаких серьёзных проблем с этим фреймворком мы не испытывали. Однако одним прекрасным декабрьским днём, когда сезонность оформления ипотечных сделок традиционно приводит к повышенной нагрузке на все сервисы Домклика, мы обнаружили проблему на центральном бэкенд-сервисе нашей системы. Суть этой проблемы заключалась в том, что в случайный момент времени воркеры приложения бесследно умирали, а у реализации мультипроцессинга в используемой нами на тот момент версии Sanic есть такая хитрая (нет) особенность, что состояние воркеров после запуска никак не отслеживается, и заданное количество никак не поддерживается в случае их смерти. Как результат, спустя некоторое (от нескольких минут до нескольких часов) время после развёртывания наши поды лишались всех воркеров, кроме одного единственного (от которого Sanic первоначально и форкает новые процессы), что драматически снижало перевариваемую нашим сервисом нагрузку: поды начинали тротлить по CPU, event loop забивался корутинами, приложение обжиралось коннектами к базе данных, запросы обрабатывались гораздо медленнее, и в конце концов мы начинали отдавать 500-ки.
https://habr.com/ru/companies/domclick/articles/761838/
👉@BookPython
Приветствую всех читателей, меня зовут Вадим, я — бэкенд-разработчик в компании Домклик. Я работаю в команде, которая разрабатывает CRM-систему для подготовки и осуществления ипотечных сделок. В этой статье я хотел бы поделиться своим интересным опытом мажорного повышения зависимостей в проекте, который свыше пяти лет находится в проде под ежедневной нагрузкой более 2000 RPS.
Предыстория
Итак, все сервисы нашей команды на бэке написаны на Python, большинство из них — с использованием фреймворка Sanic. До момента, приведшего впоследствии к этой статье, никаких серьёзных проблем с этим фреймворком мы не испытывали. Однако одним прекрасным декабрьским днём, когда сезонность оформления ипотечных сделок традиционно приводит к повышенной нагрузке на все сервисы Домклика, мы обнаружили проблему на центральном бэкенд-сервисе нашей системы. Суть этой проблемы заключалась в том, что в случайный момент времени воркеры приложения бесследно умирали, а у реализации мультипроцессинга в используемой нами на тот момент версии Sanic есть такая хитрая (нет) особенность, что состояние воркеров после запуска никак не отслеживается, и заданное количество никак не поддерживается в случае их смерти. Как результат, спустя некоторое (от нескольких минут до нескольких часов) время после развёртывания наши поды лишались всех воркеров, кроме одного единственного (от которого Sanic первоначально и форкает новые процессы), что драматически снижало перевариваемую нашим сервисом нагрузку: поды начинали тротлить по CPU, event loop забивался корутинами, приложение обжиралось коннектами к базе данных, запросы обрабатывались гораздо медленнее, и в конце концов мы начинали отдавать 500-ки.
https://habr.com/ru/companies/domclick/articles/761838/
👉@BookPython
Геттеры и сеттеры
Геттеры и сеттеры — это специальные методы класса, которые используются для управляемого доступа к атрибутам объекта. Они позволяют инкапсулировать реализацию класса и предоставить проверенный интерфейс для манипуляции данными.
— Геттер позволяет получить значение атрибута.
— Сеттер используется для установки значения атрибута.
Преимущества геттеров и сеттеров:
— Контроль доступа к атрибутам класса.
— Валидация данных.
— Возможность добавить дополнительную логику при установке/получении значений.
👉@BookPython
Геттеры и сеттеры — это специальные методы класса, которые используются для управляемого доступа к атрибутам объекта. Они позволяют инкапсулировать реализацию класса и предоставить проверенный интерфейс для манипуляции данными.
— Геттер позволяет получить значение атрибута.
— Сеттер используется для установки значения атрибута.
Преимущества геттеров и сеттеров:
— Контроль доступа к атрибутам класса.
— Валидация данных.
— Возможность добавить дополнительную логику при установке/получении значений.
👉@BookPython
Порядок блоков
👉@BookPython
except
имеет значение: если исключение может быть поймано несколькими блоками, то его поймает верхний блок. Этот код не будет работать так, как задумано
import logging
def get(storage, key, default):
try:
return storage[key]
except LookupError:
return default
except IndexError:
return get(storage, 0, default)
except TypeError:
logging.exception('unsupported key')
return default
print(get([1], 0, 42)) # 1
print(get([1], 10, 42)) # 42
print(get([1], 'x', 42)) # error msg, 42
👉@BookPython
Optional_return
Функция
Это позволяет лучше документировать поведение функции и дает подсказки при использовании ее результата, не опасаясь ошибки, если будет возвращен None.
В данном примере функция
👉@BookPython
Функция
optional_return
в модуле typing используется для определения функций, которые могут возвращать значение или None. Это позволяет лучше документировать поведение функции и дает подсказки при использовании ее результата, не опасаясь ошибки, если будет возвращен None.
В данном примере функция
find_user
может вернуть имя пользователя, если оно найдено в списке, или None, если такого имени нет. Благодаря аннотации Optional[str]
мы явно указываем, что возвращаемое значение может быть строкой или None
.👉@BookPython
Декораторы
Декораторы - это функции, которые изменяют поведение других функций. Они полезны для протоколирования, контроля доступа, мемоизации и многого другого.
Asyncio
Модуль asyncio предоставляет основу для асинхронного программирования. Это полезно для связанного с вводом-выводом и высокоуровневого структурированного сетевого кода.
👉@BookPython
Декораторы - это функции, которые изменяют поведение других функций. Они полезны для протоколирования, контроля доступа, мемоизации и многого другого.
Asyncio
Модуль asyncio предоставляет основу для асинхронного программирования. Это полезно для связанного с вводом-выводом и высокоуровневого структурированного сетевого кода.
👉@BookPython
NVIDIA Warp
Фреймворк на Python для высокопроизводительного моделирования и графики на GPU
Warp - это фреймворк на языке Python для написания высокопроизводительного кода для моделирования и графики. Warp берет обычные функции Python и JIT-компилирует их в эффективный код ядра, который может работать на CPU или GPU.
Warp предназначен для пространственных вычислений и поставляется с богатым набором примитивов, позволяющих легко писать программы для моделирования физики, восприятия, робототехники и обработки геометрии. Кроме того, ядра Warp являются дифференцируемыми и могут использоваться в составе конвейеров машинного обучения с такими фреймворками, как PyTorch и JAX.
https://github.com/NVIDIA/warp
👉@BookPython
Фреймворк на Python для высокопроизводительного моделирования и графики на GPU
Warp - это фреймворк на языке Python для написания высокопроизводительного кода для моделирования и графики. Warp берет обычные функции Python и JIT-компилирует их в эффективный код ядра, который может работать на CPU или GPU.
Warp предназначен для пространственных вычислений и поставляется с богатым набором примитивов, позволяющих легко писать программы для моделирования физики, восприятия, робототехники и обработки геометрии. Кроме того, ядра Warp являются дифференцируемыми и могут использоваться в составе конвейеров машинного обучения с такими фреймворками, как PyTorch и JAX.
https://github.com/NVIDIA/warp
👉@BookPython
Создание графика Box and Whisker
Используя matplotlib и seaborn, вы можете создать базовый график Box and Whisker.
👉@BookPython
Используя matplotlib и seaborn, вы можете создать базовый график Box and Whisker.
👉@BookPython
Различные вычисления, многопоточность, асинхронность и мультипроцессность в Python
Всем привет! Меня зовут Дмитрий Первушин, я лидер Python-компетенций трайба ИСУ в Сбере.
Эта статья рассчитана на людей, которые уже знакомы с Python, хотя бы на уровне junior+. Я объясню, какие есть отличия и особенности в многопоточности, асинхронности и мультипроцессности в Python, где и когда они используются. Как говорится в пословице: «Всё познаётся в сравнении», именно в таком стиле я подготовил примеры. Кроме этого, буду специально делать ошибки и рассматривать неправильные подходы, чтобы можно было сразу разобраться, убедиться и запомнить, почему так делать нельзя и какой другой подход в этом случае нужно использовать.
https://habr.com/ru/companies/sberbank/articles/829098/
👉@BookPython
Всем привет! Меня зовут Дмитрий Первушин, я лидер Python-компетенций трайба ИСУ в Сбере.
Эта статья рассчитана на людей, которые уже знакомы с Python, хотя бы на уровне junior+. Я объясню, какие есть отличия и особенности в многопоточности, асинхронности и мультипроцессности в Python, где и когда они используются. Как говорится в пословице: «Всё познаётся в сравнении», именно в таком стиле я подготовил примеры. Кроме этого, буду специально делать ошибки и рассматривать неправильные подходы, чтобы можно было сразу разобраться, убедиться и запомнить, почему так делать нельзя и какой другой подход в этом случае нужно использовать.
https://habr.com/ru/companies/sberbank/articles/829098/
👉@BookPython