В 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
Если кратко, то это замена для функции gather, которая запускает сразу несколько корутин. Стандартная функция gather непредсказуема и нужно помнить, что при отмене одной корутины из списка, другие не будут автоматически отменены. Мне приходилось дополнительно писать обёртку, которая обрабатывала возможные ошибки от асинхронных функций и делала явную отмену gather.
С приходом TaskGroup появляется некая атомарность у группы корутин, и соответственно более удобная и наглядная обработка ошибок.
Код взят из исходников EdgeDB: https://github.com/edgedb/edgedb/blob/master/edb/common/taskgroup.py
GitHub
bpo-46752: Introduce task groups in asyncio by gvanrossum · Pull Request #31270 · python/cpython
This is EdgeDB's TaskGroup class, adapted for Python 3.11.
In the individual commits you can see how I evolved this from the version in EdgeDB.
Here's a to-do list:
Figure out why in test...
In the individual commits you can see how I evolved this from the version in EdgeDB.
Here's a to-do list:
Figure out why in test...
Намедни попалась на глаза статья про "затыки" в производительности асинхронных фреймворков на примере FastAPI: https://aivarsk.com/2022/01/21/fastapi-concurrency/
По мотивам этой статьи написал свою заметку с замечаниями о производительности asyncio и как работать в условиях CPU-intensive кода.
По мотивам этой статьи написал свою заметку с замечаниями о производительности asyncio и как работать в условиях CPU-intensive кода.
Aivars Kalvāns
FastAPI and cooperative multi-threading
Cal Paterson wrote a great article comparing and describing synchronous and asynchronous Python frameworks and explaining why asynchronous frameworks go a bit wobbly under load. This is a story of how we experienced wobbliness in a recent project.
👍6🔥1👏1
Генерация клиентов для вашего API-сервиса на FastAPI: https://fastapi.tiangolo.com/advanced/generate-clients/
Эта фича стала доступна в версии 0.75.0
Эта фича стала доступна в версии 0.75.0
Tiangolo
Generating SDKs - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
👍7
Чтобы получить кратный прирост производительности вашего FastAPI приложения достаточно перевести его на PyPy. Как? Читайте в статье: https://tonybaloney.github.io/posts/pypy-in-production.html
У автора получилось увеличить производительность в 4 раза!
У автора получилось увеличить производительность в 4 раза!
tonybaloney.github.io
PyPy in Production
Deploying a real-world Python application with PyPy
👍6
В JS хотят добавить аннотацию типов: https://devblogs.microsoft.com/typenoscript/a-proposal-for-type-syntax-in-javanoscript/
Microsoft News
A Proposal For Type Syntax in JavaScript
Today we’re excited to announce our support and collaboration on a new Stage 0 proposal to bring optional and erasable type syntax to JavaScript. Because this new syntax wouldn’t change how surrounding code runs, it would effectively act as comments. We think…
👎3👍2🔥2😁1
Вышла долгожданная для многих версия 1.18 языка Go: https://go.dev/blog/go1.18
Долгожданная потому что в ней появились обобщённые типы или дженерики.
Долгожданная потому что в ней появились обобщённые типы или дженерики.
go.dev
Go 1.18 is released! - The Go Programming Language
Go 1.18 adds generics, native fuzzing, workspace mode, performance improvements, and more.
👍5
21 апреля стартует курс по асинхронной архитектуре. Авторы — двое известных чуваков: Федя Борщёв и Антон Давыдов.
Вы научитесь проектировать и разрабатывать сложные распределенные системы — с Kafka, CQRS и сложными транзакциями. Курс — крафтовый: это значит вы не платите гигантской компании, которая просто пригласила пару чуваков из компании с громким именем. Наоборот — ребята давно копили опыт и теперь решили поделиться.
Это фундаментальный курс о проектировании больших систем — о форматах данных, отказоустойчивости, тестировании и даже разговорах с бизнесом. Будет полезен, если собираетесь иметь дело с любым серьёзным проектом, в котором больше одного репозитория.
Даже если вы джун, который пилит монолит в маленьком стартапе, курс вам поможет: мышление проектировщика позволяет писать более понятный и изолированный код.
Учимся 4 недели, по 2 урока в неделю. Будут домашки с разбором, так что на выходе, если не поленитесь — получите проект с асинхронной архитектурой в портфолио.
Для подписчиков скидка 10% по промокоду devbrain. Действует до 10 апреля.
Посмотреть программу и отзывы →
Вы научитесь проектировать и разрабатывать сложные распределенные системы — с Kafka, CQRS и сложными транзакциями. Курс — крафтовый: это значит вы не платите гигантской компании, которая просто пригласила пару чуваков из компании с громким именем. Наоборот — ребята давно копили опыт и теперь решили поделиться.
Это фундаментальный курс о проектировании больших систем — о форматах данных, отказоустойчивости, тестировании и даже разговорах с бизнесом. Будет полезен, если собираетесь иметь дело с любым серьёзным проектом, в котором больше одного репозитория.
Даже если вы джун, который пилит монолит в маленьком стартапе, курс вам поможет: мышление проектировщика позволяет писать более понятный и изолированный код.
Учимся 4 недели, по 2 урока в неделю. Будут домашки с разбором, так что на выходе, если не поленитесь — получите проект с асинхронной архитектурой в портфолио.
Для подписчиков скидка 10% по промокоду devbrain. Действует до 10 апреля.
Посмотреть программу и отзывы →
tough-dev.school
Коммуникации систем
👍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/
Как ни странно, но в Яндекс.Облаке такая фича была изначально, это помогло мне развернуть телеграм-бота и не платить за него ни копейки.
Как ни странно, но в Яндекс.Облаке такая фича была изначально, это помогло мне развернуть телеграм-бота и не платить за него ни копейки.
Amazon
Announcing AWS Lambda Function URLs: Built-in HTTPS Endpoints for Single-Function Microservices | Amazon Web Services
Organizations are adopting microservices architectures to build resilient and scalable applications using AWS Lambda. These applications are composed of multiple serverless functions that implement the business logic. Each function is mapped to API endpoints…
👍2👎1
Возможны вы уже видели, но если нет, то вышел очень крутой профайлер памяти для Python от Bloomberg: https://github.com/bloomberg/memray
У Юрия Селиванова в твиттере есть тред по этой теме: https://twitter.com/1st1/status/1516859294896906241
У Юрия Селиванова в твиттере есть тред по этой теме: https://twitter.com/1st1/status/1516859294896906241
GitHub
GitHub - bloomberg/memray: Memray is a memory profiler for Python
Memray is a memory profiler for Python. Contribute to bloomberg/memray development by creating an account on GitHub.
🔥6👍5🤔1
Месяц назад ребята из Delivery Club поделились первой частью эволюции собственной рекомендательной системы ресторанов. Подробнее в публикации на Хабре.
На днях вышло продолжение. Из новой статьи вы узнаете, как отранжировать рестораны персонально для каждого пользователя, зачем нужна офлайновая ML-модель и почему обучение моделей «в лоб» не работает.
На днях вышло продолжение. Из новой статьи вы узнаете, как отранжировать рестораны персонально для каждого пользователя, зачем нужна офлайновая ML-модель и почему обучение моделей «в лоб» не работает.
👍4
Вышла первая бета python 3.11: https://www.python.org/downloads/release/python-3110b1/
Версия 3.11 несёт в себе большое количество новых фич. Скоро выпущу подробный пост с разбором каждой фичи. Помимо этого в рамках инициативы Faster Python заявляется, что версия 3.11 в среднем на 22% быстрее чем 3.10 😲😲
Версия 3.11 несёт в себе большое количество новых фич. Скоро выпущу подробный пост с разбором каждой фичи. Помимо этого в рамках инициативы Faster Python заявляется, что версия 3.11 в среднем на 22% быстрее чем 3.10 😲😲
Python.org
Python Release Python 3.11.0b1
The official home of the Python Programming Language
👍12🤔1🤩1
Вы приняты
Многие из вас уже учились в Школе Сильных Программистов — это ребята, которые сделали курсы «Асинхронная Архитектура» и «Стать Тимлидом».
Теперь Федя с Марьяной запускают курс на максимально актуальную сейчас тему — как найти работу за рубежом. На курс позвали чувака, который уже 4 года нанимает инженеров в Мюнхене, и сам переехал в Германию из Красноярска в 2014 году. Обещают помочь с линкедин-профилем, провести мок-интервью и дать обратной связи от себя и других студентов.
Обучение стартует 26 мая, продлится три недели и затронет весь цикл трудоустройства — от выбора компании до оценки адекватности оффера.
Записаться →
P.S. По промокоду devbrain10 скидка 10% до 18 мая.
Многие из вас уже учились в Школе Сильных Программистов — это ребята, которые сделали курсы «Асинхронная Архитектура» и «Стать Тимлидом».
Теперь Федя с Марьяной запускают курс на максимально актуальную сейчас тему — как найти работу за рубежом. На курс позвали чувака, который уже 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 в своих проектах/на работе?
Вышла первая альфа-версия 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
YouTube
Welcome - Emily Morehouse
Welcome to PyCon US 2022
Note: Video begins at 1:50
Note: Video begins at 1:50
👍8
Тут DigitalOcean завёз новый сервис FaaS, Function as a Service: https://do.co/3PBPcWS
Digitalocean
Introducing DigitalOcean Functions: A powerful serverless computing solution | DigitalOcean
DigitalOcean Functions is a fast, scalable, and cost-effective compute solution that enables you to build quickly, scale automatically, and save costs by removing the need to pay for idle resources.
🔥2
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/
Хорошей практикой при работе с внешними сервисами я считаю явное указание таймаутов ожидания соединения и ответа от хоста. Такой подход поможет избежать проблем с "зависанием" соединения и, как следствие, блокировкой процесса (для блокирующих соединений). На моей памяти было 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/
GitHub
GitHub - facebook/facebook-python-business-sdk: Python SDK for Meta Marketing APIs
Python SDK for Meta Marketing APIs. Contribute to facebook/facebook-python-business-sdk development by creating an account on GitHub.
👍15😁1
В доке Mozilla нашел html-тэг о котором ранее не знал — datalist: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist
Этот тег выполняет функции select и input, но есть крутая фишечка — нативный автокомплит.
А вы знали о теге <datalist>?
Этот тег выполняет функции select и input, но есть крутая фишечка — нативный автокомплит.
А вы знали о теге <datalist>?
MDN Web Docs
<datalist>: The HTML Data List element - HTML | MDN
The <datalist> HTML element contains a set of <option> elements that represent the permissible or recommended options available to choose from within other controls.
👍7🔥3🤯2
Выходим на мета-уровень!🤯 11 июля начинается новый сезон Podlodka Soft Skills Crew, который называется "Научиться учиться"🤩
🎓В нашей жизни и так много обучения, а в айти и тем более – новые технологии, новые доменные области, новые процессы. Все это постоянно меняется.
Поэтому критически важно осваивать новые знания эффективно и осмысленно.
Поэтому в новом сезоне мы сконцентрируемся на выстраивании эффективного подхода к самообучению:
⭐️ Проанализируем свои потребности и цели в обучении
⭐️ Построим план по достижению этих целей
⭐️ Поймем принципы обучения на биологическом уровне
⭐️ Изучим и сравним инструменты обучения от книг и до сессий с ментором
⭐️ Научимся разбираться с мотивацией и находить силы
✨Бонус трек – в течение всей недели по утрам будут практические воркшопы по осознанности, рефлексии и самодиагностике!
Если вы еще ни разу не были на Podlodka Crew, то самое время попробовать! Главные фичи:
💡Узкая тема. Разбираем теорию и практику конкретного подхода или технологии.
💡Удобное расписание: сессии идут 2 раза в день с понедельника по пятницу.
💡Море практики, реальных кейсов и нетворкинга без границ
Купить билеты и посмотреть расписание можно на сайте конференции. Ждем вас на борту!
🎓В нашей жизни и так много обучения, а в айти и тем более – новые технологии, новые доменные области, новые процессы. Все это постоянно меняется.
Поэтому критически важно осваивать новые знания эффективно и осмысленно.
Поэтому в новом сезоне мы сконцентрируемся на выстраивании эффективного подхода к самообучению:
⭐️ Проанализируем свои потребности и цели в обучении
⭐️ Построим план по достижению этих целей
⭐️ Поймем принципы обучения на биологическом уровне
⭐️ Изучим и сравним инструменты обучения от книг и до сессий с ментором
⭐️ Научимся разбираться с мотивацией и находить силы
✨Бонус трек – в течение всей недели по утрам будут практические воркшопы по осознанности, рефлексии и самодиагностике!
Если вы еще ни разу не были на Podlodka Crew, то самое время попробовать! Главные фичи:
💡Узкая тема. Разбираем теорию и практику конкретного подхода или технологии.
💡Удобное расписание: сессии идут 2 раза в день с понедельника по пятницу.
💡Море практики, реальных кейсов и нетворкинга без границ
Купить билеты и посмотреть расписание можно на сайте конференции. Ждем вас на борту!
podlodka.io
Онлайн-конференция Podlodka Soft Skills Crew, сезон #7
Недельное мероприятие от команды Podlodka: ежедневные интерактивные сессии в Zoom, нон-стоп общение с экспертами и звёздами индустрии, закрытое профессиональное сообщество в Telegram.
Django 4.0.6, 3.2.14
В последнем продакшен релизе Django появился весьма не приятный баг, который может привести к SQL Injection: https://www.djangoproject.com/weblog/2022/jul/04/security-releases/
Рекомендуется обновиться как можно быстрее.
В последнем продакшен релизе Django появился весьма не приятный баг, который может привести к SQL Injection: https://www.djangoproject.com/weblog/2022/jul/04/security-releases/
Рекомендуется обновиться как можно быстрее.
😁2