Коробка с питоном
538 subscribers
45 photos
119 links
Заметки от Python-разработчика: сниппеты, обзоры пакетов, новости и другая полезная информация.

Автор: @kiriharu
Download Telegram
aiomisc - огромное количество различных утилит для asyncio.

Из самых полезных утилит для себя выделил возможность создавать энтрипоинты с логгированием, огромное количество классов-сервисов (PeriodicService, CronService и т.д.), работа с потоками и управление сигналами.

GitHub | Документация
#библиотека #asyncio
В Python 3.11 для асинхронщины появятся TaskGroup 🎉!

Зачем они нужны?

1. Это более крутая замена asyncio.gather(), так как TaskGroup имеют более понятный, удобный и безопасный API.
2. Как и asyncio.gather(), он необходим чтобы выполнить набор каких-то задач. Если одна из них упадет с ошибкой - остальные задачи могут быть отменены.

С нетерпением ждем :)

#новости #asyncio
Если у вас есть желание понять как работает asyncio, threading или multiprocessing, либо же появились вопросы - рекомендую обратить внимание на superfastpython.com

Автор понятным языком рассказывает про доступные формы параллелизма и где какую можно применить. Для совсем начинающих он сделал "пути обучения", где раскиданы темы по каждой из форм.

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

Практически каждая статья сопровождается реальными примерами, которые можно самому запустить.
Все материалы на английском, но некоторые из них переводит на русский комьюнити (например цикл статей про asyncio).

#asyncio #threading #multiprocessing #статья
Shielded execution в asyncio

Допустим, есть следующий обработчик, который производит оплату:

async def handler(request):
await service.pay(request.user)
return web.Response(text="payed")

Если соединение отвалится то обработчик упадет с ошибкой, так как серверу будет некуда отправлять ответ. Задача должна отмениться, но что если мы хотим, чтобы она выполнилась наверняка?

Поможет нам в этом asycio.shield(). Он защищает задачу от отмены, даже в случае возникновения ошибки. Выглядит это следующим образом:

async def handler(request):
await asyncio.shield(service.pay(request.user))
return web.Response(text="payed")

#asyncio #std