Визуализация процесса релиза CPython
На прошлой неделе я встретился с резидентом разработчиков CPython и менеджером по выпуску Лукашем Лангой, чтобы обсудить процесс выпуска CPython (подробно описанный в PEP 101). Все, что я узнал, я задокументировал ниже и буду предлагать такие улучшения, как введение дополнительных средств защиты для процесса выпуска и сборки программного обеспечения для процесса сборки и конечных собранных артефактов.
https://sethmlarson.dev/security-developer-in-residence-weekly-report-9
👉
На прошлой неделе я встретился с резидентом разработчиков CPython и менеджером по выпуску Лукашем Лангой, чтобы обсудить процесс выпуска CPython (подробно описанный в PEP 101). Все, что я узнал, я задокументировал ниже и буду предлагать такие улучшения, как введение дополнительных средств защиты для процесса выпуска и сборки программного обеспечения для процесса сборки и конечных собранных артефактов.
https://sethmlarson.dev/security-developer-in-residence-weekly-report-9
👉
Как мы версию Sanic’а повышали
Приветствую всех читателей, меня зовут Вадим, я — бэкенд-разработчик в компании Домклик. Я работаю в команде, которая разрабатывает CRM-систему для подготовки и осуществления ипотечных сделок. В этой статье я хотел бы поделиться своим интересным опытом мажорного повышения зависимостей в проекте, который свыше пяти лет находится в проде под ежедневной нагрузкой более 2000 RPS.
Предыстория
Итак, все сервисы нашей команды на бэке написаны на Python, большинство из них — с использованием фреймворка Sanic. До момента, приведшего впоследствии к этой статье, никаких серьёзных проблем с этим фреймворком мы не испытывали. Однако одним прекрасным декабрьским днём, когда сезонность оформления ипотечных сделок традиционно приводит к повышенной нагрузке на все сервисы Домклика, мы обнаружили проблему на центральном бэкенд-сервисе нашей системы. Суть этой проблемы заключалась в том, что в случайный момент времени воркеры приложения бесследно умирали, а у реализации мультипроцессинга в ис...
Приветствую всех читателей, меня зовут Вадим, я — бэкенд-разработчик в компании Домклик. Я работаю в команде, которая разрабатывает CRM-систему для подготовки и осуществления ипотечных сделок. В этой статье я хотел бы поделиться своим интересным опытом мажорного повышения зависимостей в проекте, который свыше пяти лет находится в проде под ежедневной нагрузкой более 2000 RPS.
Предыстория
Итак, все сервисы нашей команды на бэке написаны на Python, большинство из них — с использованием фреймворка Sanic. До момента, приведшего впоследствии к этой статье, никаких серьёзных проблем с этим фреймворком мы не испытывали. Однако одним прекрасным декабрьским днём, когда сезонность оформления ипотечных сделок традиционно приводит к повышенной нагрузке на все сервисы Домклика, мы обнаружили проблему на центральном бэкенд-сервисе нашей системы. Суть этой проблемы заключалась в том, что в случайный момент времени воркеры приложения бесследно умирали, а у реализации мультипроцессинга в ис...
Как мы версию Sanic’а повышали
Приветствую всех читателей, меня зовут Вадим, я — бэкенд-разработчик в компании Домклик. Я работаю в команде, которая разрабатывает CRM-систему для подготовки и осуществления ипотечных сделок. В этой статье я хотел бы поделиться своим интересным опытом мажорного повышения зависимостей в проекте, который свыше пяти лет находится в проде под ежедневной нагрузкой более 2000 RPS.
Предыстория
Итак, все сервисы нашей команды на бэке написаны на Python, большинство из них — с использованием фреймворка Sanic. До момента, приведшего впоследствии к этой статье, никаких серьёзных проблем с этим фреймворком мы не испытывали. Однако одним прекрасным декабрьским днём, когда сезонность оформления ипотечных сделок традиционно приводит к повышенной нагрузке на все сервисы Домклика, мы обнаружили проблему на центральном бэкенд-сервисе нашей системы. Суть этой проблемы заключалась в том, что в случайный момент времени воркеры приложения бесследно умирали, а у реализации мультипроцессинга в ис...
Приветствую всех читателей, меня зовут Вадим, я — бэкенд-разработчик в компании Домклик. Я работаю в команде, которая разрабатывает CRM-систему для подготовки и осуществления ипотечных сделок. В этой статье я хотел бы поделиться своим интересным опытом мажорного повышения зависимостей в проекте, который свыше пяти лет находится в проде под ежедневной нагрузкой более 2000 RPS.
Предыстория
Итак, все сервисы нашей команды на бэке написаны на Python, большинство из них — с использованием фреймворка Sanic. До момента, приведшего впоследствии к этой статье, никаких серьёзных проблем с этим фреймворком мы не испытывали. Однако одним прекрасным декабрьским днём, когда сезонность оформления ипотечных сделок традиционно приводит к повышенной нагрузке на все сервисы Домклика, мы обнаружили проблему на центральном бэкенд-сервисе нашей системы. Суть этой проблемы заключалась в том, что в случайный момент времени воркеры приложения бесследно умирали, а у реализации мультипроцессинга в ис...
Геттеры и сеттеры
Геттеры и сеттеры — это специальные методы класса, которые используются для управляемого доступа к атрибутам объекта. Они позволяют инкапсулировать реализацию класса и предоставить проверенный интерфейс для манипуляции данными.
— Геттер позволяет получить значение атрибута.
— Сеттер используется для установки значения атрибута.
Преимущества геттеров и сеттеров:
— Контроль доступа к атрибутам класса.
— Валидация данных.
— Возможность добавить дополнительную логику при установке/получении значений.
👉
Геттеры и сеттеры — это специальные методы класса, которые используются для управляемого доступа к атрибутам объекта. Они позволяют инкапсулировать реализацию класса и предоставить проверенный интерфейс для манипуляции данными.
— Геттер позволяет получить значение атрибута.
— Сеттер используется для установки значения атрибута.
Преимущества геттеров и сеттеров:
— Контроль доступа к атрибутам класса.
— Валидация данных.
— Возможность добавить дополнительную логику при установке/получении значений.
👉
Optional_return
Функция
Это позволяет лучше документировать поведение функции и дает подсказки при использовании ее результата, не опасаясь ошибки, если будет возвращен None.
В данном примере функция
👉
Функция
optional_return в модуле typing используется для определения функций, которые могут возвращать значение или None. Это позволяет лучше документировать поведение функции и дает подсказки при использовании ее результата, не опасаясь ошибки, если будет возвращен None.
В данном примере функция
find_user может вернуть имя пользователя, если оно найдено в списке, или None, если такого имени нет. Благодаря аннотации Optional[str] мы явно указываем, что возвращаемое значение может быть строкой или None.👉
Декораторы
Декораторы - это функции, которые изменяют поведение других функций. Они полезны для протоколирования, контроля доступа, мемоизации и многого другого.
Asyncio
Модуль asyncio предоставляет основу для асинхронного программирования. Это полезно для связанного с вводом-выводом и высокоуровневого структурированного сетевого кода.
👉
Декораторы - это функции, которые изменяют поведение других функций. Они полезны для протоколирования, контроля доступа, мемоизации и многого другого.
Asyncio
Модуль asyncio предоставляет основу для асинхронного программирования. Это полезно для связанного с вводом-выводом и высокоуровневого структурированного сетевого кода.
👉
Различные вычисления, многопоточность, асинхронность и мультипроцессность в Python
Всем привет! Меня зовут Дмитрий Первушин, я лидер Python-компетенций трайба ИСУ в Сбере.
Эта статья рассчитана на людей, которые уже знакомы с Python, хотя бы на уровне junior+. Я объясню, какие есть отличия и особенности в многопоточности, асинхронности и мультипроцессности в Python, где и когда они используются. Как говорится в пословице: «Всё познаётся в сравнении», именно в таком стиле я подготовил примеры. Кроме этого, буду специально делать ошибки и рассматривать неправильные подходы, чтобы можно было сразу разобраться, убедиться и запомнить, почему так делать нельзя и какой другой подход в этом случае нужно использовать.
https://habr.com/ru/companies/sberbank/articles/829098/
👉
Всем привет! Меня зовут Дмитрий Первушин, я лидер Python-компетенций трайба ИСУ в Сбере.
Эта статья рассчитана на людей, которые уже знакомы с Python, хотя бы на уровне junior+. Я объясню, какие есть отличия и особенности в многопоточности, асинхронности и мультипроцессности в Python, где и когда они используются. Как говорится в пословице: «Всё познаётся в сравнении», именно в таком стиле я подготовил примеры. Кроме этого, буду специально делать ошибки и рассматривать неправильные подходы, чтобы можно было сразу разобраться, убедиться и запомнить, почему так делать нельзя и какой другой подход в этом случае нужно использовать.
https://habr.com/ru/companies/sberbank/articles/829098/
👉
🚀 Не надо тратить миллионы на билеты, туры и путешествия. Хватит и грошей.
Ссылка на канал, подписывайтесь: @cheapglobus
Ссылка на канал, подписывайтесь: @cheapglobus
Как правильно записать данные в файл? Что может пойти не так в ином случае?
Когда вы используете инструкцию open без контекстного менеджера и перед закрытием файла возникает какое-либо исключение, могут возникнуть проблемы с памятью. В таком случае файл будет повреждён.
Если вы используете инструкцию with для открытия файла и возникает проблема, Python гарантирует, что файл будет корректно закрыт.
👉
Когда вы используете инструкцию open без контекстного менеджера и перед закрытием файла возникает какое-либо исключение, могут возникнуть проблемы с памятью. В таком случае файл будет повреждён.
Если вы используете инструкцию with для открытия файла и возникает проблема, Python гарантирует, что файл будет корректно закрыт.
👉
Метод join
Метод
Основные моменты:
— Метод принадлежит строке, вызывается на разделителе.
— В качестве разделителя можно использовать любую строку.
— В результате получится строка, где между элементами последовательности вставлен разделитель.
👉
Метод
join() позволяет объединить элементы последовательности (списка, кортежа и т.д.) в строку.Основные моменты:
— Метод принадлежит строке, вызывается на разделителе.
— В качестве разделителя можно использовать любую строку.
— В результате получится строка, где между элементами последовательности вставлен разделитель.
👉
Какие различия есть между методами для списков append() и extend()?
Методы append() и extend() для списков имеют разное назначение:
— append() добавляет один элемент в конец списка, принимая в качестве аргумента этот элемент.
my_list.append(10) — добавит число 10 в конец списка my_list.
— extend() расширяет список добавляя в него несколько элементов сразу. В качестве аргумента принимается итерируемый объект (список, кортеж и т.п.).
my_list.extend([10, 20, 30]) — добавит числа 10, 20, 30 в конец списка my_list.
👉
Методы append() и extend() для списков имеют разное назначение:
— append() добавляет один элемент в конец списка, принимая в качестве аргумента этот элемент.
my_list.append(10) — добавит число 10 в конец списка my_list.
— extend() расширяет список добавляя в него несколько элементов сразу. В качестве аргумента принимается итерируемый объект (список, кортеж и т.п.).
my_list.extend([10, 20, 30]) — добавит числа 10, 20, 30 в конец списка my_list.
👉