home.social

#контекст_выполнения — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #контекст_выполнения, aggregated by home.social.

  1. contextvars: почему thread-local сломался в asyncio и как это починили

    В мире потоков всё было просто: threading.local() даёт каждому потоку свои данные. Request ID, текущий пользователь, database connection — положил в thread-local, достал когда нужно. FastAPI, Flask, Django — все так делали. Потом пришёл asyncio, и эта модель сломалась. В одном потоке выполняются тысячи корутин, и thread-local у них общий. Положил request ID в одной корутине — прочитал чужой в другой. contextvars , появившийся в Python 3.7, решает эту проблему, но механика его работы не очевидна. Разберём, почему thread-local не работает в async, как устроены contextvars, и какие паттерны использовать.

    habr.com/ru/companies/otus/art

    #python #asyncio #контекст_выполнения #корутины