DevBrain – Telegram
DevBrain
3.03K subscribers
28 photos
2 videos
9 files
712 links
Автор @adilkhash

Веду блог https://khashtamov.com/
Download Telegram
Для любителей алгоритмов и BigO-нотации. Попался на глаза доклад из старых закладок от небезызвестного Ned Batchelder (автор coverage.py): https://www.youtube.com/watch?v=duvZ-2UK0fc
В блоге у него также есть пост по мотивам этого видео: https://nedbatchelder.com/text/bigo.html
👍3
В python 3.11 в модуль asyncio завезли TaskGroup: https://bit.ly/3sNbVVe

Если кратко, то это замена для функции gather, которая запускает сразу несколько корутин. Стандартная функция gather непредсказуема и нужно помнить, что при отмене одной корутины из списка, другие не будут автоматически отменены. Мне приходилось дополнительно писать обёртку, которая обрабатывала возможные ошибки от асинхронных функций и делала явную отмену gather.

С приходом TaskGroup появляется некая атомарность у группы корутин, и соответственно более удобная и наглядная обработка ошибок.

Код взят из исходников EdgeDB: https://github.com/edgedb/edgedb/blob/master/edb/common/taskgroup.py
Намедни попалась на глаза статья про "затыки" в производительности асинхронных фреймворков на примере FastAPI: https://aivarsk.com/2022/01/21/fastapi-concurrency/

По мотивам этой статьи написал свою заметку с замечаниями о производительности asyncio и как работать в условиях CPU-intensive кода.
👍6🔥1👏1
Генерация клиентов для вашего API-сервиса на FastAPI: https://fastapi.tiangolo.com/advanced/generate-clients/
Эта фича стала доступна в версии 0.75.0
👍7
Чтобы получить кратный прирост производительности вашего FastAPI приложения достаточно перевести его на PyPy. Как? Читайте в статье: https://tonybaloney.github.io/posts/pypy-in-production.html
У автора получилось увеличить производительность в 4 раза!
👍6
Вышла долгожданная для многих версия 1.18 языка Go: https://go.dev/blog/go1.18
Долгожданная потому что в ней появились обобщённые типы или дженерики.
👍5
21 апреля стартует курс по асинхронной архитектуре. Авторы — двое известных чуваков: Федя Борщёв и Антон Давыдов.

Вы научитесь проектировать и разрабатывать сложные распределенные системы — с Kafka, CQRS и сложными транзакциями. Курс — крафтовый: это значит вы не платите гигантской компании, которая просто пригласила пару чуваков из компании с громким именем. Наоборот — ребята давно копили опыт и теперь решили поделиться.

Это фундаментальный курс о проектировании больших систем — о форматах данных, отказоустойчивости, тестировании и даже разговорах с бизнесом. Будет полезен, если собираетесь иметь дело с любым серьёзным проектом, в котором больше одного репозитория.

Даже если вы джун, который пилит монолит в маленьком стартапе, курс вам поможет: мышление проектировщика позволяет писать более понятный и изолированный код.

Учимся 4 недели, по 2 урока в неделю. Будут домашки с разбором, так что на выходе, если не поленитесь — получите проект с асинхронной архитектурой в портфолио.

Для подписчиков скидка 10% по промокоду devbrain. Действует до 10 апреля.

Посмотреть программу и отзывы →
👍4🔥2👎1
Хорошие новости. В AWS Lambda появились HTTPS URL, теперь можно вызывать Lambda по ссылке, минуя настройку через API Gateway: https://aws.amazon.com/ru/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/

Как ни странно, но в Яндекс.Облаке такая фича была изначально, это помогло мне развернуть телеграм-бота и не платить за него ни копейки.
👍2👎1
Крутой справочник по f-строкам в Python: https://fstring.help/
👍11
Возможны вы уже видели, но если нет, то вышел очень крутой профайлер памяти для Python от Bloomberg: https://github.com/bloomberg/memray
У Юрия Селиванова в твиттере есть тред по этой теме: https://twitter.com/1st1/status/1516859294896906241
🔥6👍5🤔1
​​Месяц назад ребята из Delivery Club поделились первой частью эволюции собственной рекомендательной системы ресторанов. Подробнее в публикации на Хабре.

На днях вышло продолжение. Из новой статьи вы узнаете, как отранжировать рестораны персонально для каждого пользователя, зачем нужна офлайновая ML-модель и почему обучение моделей «в лоб» не работает.
👍4
Вышла первая бета python 3.11: https://www.python.org/downloads/release/python-3110b1/
Версия 3.11 несёт в себе большое количество новых фич. Скоро выпущу подробный пост с разбором каждой фичи. Помимо этого в рамках инициативы Faster Python заявляется, что версия 3.11 в среднем на 22% быстрее чем 3.10 😲😲
👍12🤔1🤩1
​​Вы приняты

Многие из вас уже учились в Школе Сильных Программистов — это ребята, которые сделали курсы «Асинхронная Архитектура» и «Стать Тимлидом».

Теперь Федя с Марьяной запускают курс на максимально актуальную сейчас тему — как найти работу за рубежом. На курс позвали чувака, который уже 4 года нанимает инженеров в Мюнхене, и сам переехал в Германию из Красноярска в 2014 году. Обещают помочь с линкедин-профилем, провести мок-интервью и дать обратной связи от себя и других студентов.

Обучение стартует 26 мая, продлится три недели и затронет весь цикл трудоустройства — от выбора компании до оценки адекватности оффера.

Записаться →

P.S. По промокоду devbrain10 скидка 10% до 18 мая.
👍4👎2🤔1
Релиз первой альфы Django 4.1

Вышла первая альфа-версия Django 4.1: https://www.djangoproject.com/weblog/2022/may/18/django-41-alpha-1-released/

Альфа-релиз подразумевает feature-freeze, а ближайшая бета-версия выйдет в конце июня. Финальный же релиз намечается на начало августа. Отмечу, что Django 4.1 это не LTS релиз, LTS-версией будет Django 4.2, которая выйдет в августе 2023 года.

Что же примечательного в Django 4.1?

1. Class-based views стали асинхронными (ранее асинхронными были только функции, function-based views).

2. Появился асинхронный интерфейс для Django ORM, но отмечу что разработчики лишь скрыли под капотом вызовы запросов к базе через sync_to_async. Проще говоря, синхронные запросы к БД запускаются в отдельных потоках в рамках eventloop. У ORM-методов появились свои асинхронные аналоги с приставкой a:

Примеры:
- Book.objects.aget()
- Book.objects.afirst()

3. Прекращение поддержки PostgreSQL ниже 11 версии. Django 4.1 поддерживает только PostgreSQL 11 и выше.

4. Запрет вызова logout через HTTP GET метод. Если у вас на сайте есть кнопка выхода, проверьте что вы это делаете через POST запрос (исправьте при необходимости).

5. Прекращается поддержка кэш-бэкенда для memcached

Более подробную информацию о фичах и обратно несовместимых изменениях можно почитать на сайте: https://docs.djangoproject.com/en/dev/releases/4.1/

А вы используете Django в своих проектах/на работе?
🔥11👍7
Видосы с прошедшего PyCon US 2022 подъехали: https://bit.ly/3wF0qSV
👍8
Forwarded from DataEng
Про таймауты и внешние API

Хорошей практикой при работе с внешними сервисами я считаю явное указание таймаутов ожидания соединения и ответа от хоста. Такой подход поможет избежать проблем с "зависанием" соединения и, как следствие, блокировкой процесса (для блокирующих соединений). На моей памяти было 2 неприятных кейса. В далёком 2015 я использовал requests для работы с сервисом поиска и бронирования ЖД билетов в Казахстане, по-умолчанию в requests нет таймаута и ожидание может превратиться в бесконечность. Всё было хорошо до тех пор пока у внешнего сервиса не начались проблемы, и он перестал отвечать на запросы. Все worker-процессы ушли в бесконечное ожидание, и мой сервис перестал принимать новые соединения, сайт попросту сломался. Тогда мне потребовалось некоторое время, чтобы понять в чем проблема.

Со второй проблемой я столкнулся неделю назад. Сейчас я разрабатываю веб-сервисы для автоматизации рекламных сетей, активно пользуюсь Facebook Ads. Для работы с маркетинговым сервисом Фейсбука существует библиотека facebook-python-business-sdk. Внимание! Под капотом она использует requests 😉 И у неё нет таймаута по умолчанию. Я наткнулся на те же грабли, когда ФБ стал подтормаживать.

К слову, если вы как и я пользуетесь facebook-python-business-sdk, то таймаут можно установить через инициализацию API-класса:

FacebookAdsApi.init(access_token=access_token, api_version='v13.0', timeout=settings.FACEBOOK_ADS_API_TIMEOUT)

Не наступайте на грабли, ставьте таймауты 😉

Также по теме в ленте увидел пост про патчинг requests: https://adamj.eu/tech/2022/06/23/how-to-patch-requests-to-have-a-default-timeout/
👍15😁1