Асинхронный django: продолжение

Джерело:
Хабрахабр:

Дата публікації:
01/12/2021 23:09

Постійна адреса новини:
http://www.vsinovyny.com/8490915

Асинхронный django: продолжение

 

01/12/2021 23:09 // Хабрахабр:

Некоторое время назад я писал о том, как можно добавить асинхронность в django. Теперь прошлый пост имеет только исторический интерес, если не читали, то не читайте. Принципиально подход не изменился, но стало гораздо проще и понятнее - не могу не написать. И пример кода другой.

Я писал только о django orm, и камнем преткновения там является обращение к базе данных, но подход можно обобщить на любой код, содержащий операции ввода-вывода.

В общем, выясняется, что добавить асинхронность в django - по сути, не сложнее, чем портировать его в асинхронность - раз и навсегда. Вы примерно представляете, как бы это нужно было делать: берём асинхронный драйвер с API примерно похожим на драйверы django и заменяем в недрах кода вызовы вроде driver.execute_sql(sql, params) на вызовы вроде await async_driver.execute_sql(sql, params). Конечно, мы сразу получим SyntaxError потому что нельзя использовать await в обычной функции, и будем вынуждены добавить async и await во всём стеке вызовов.

Весь API django отлично применим к асинхронной версии, за небольшими адаптации. Например, ленивых атрибутов больше не будет, а обращение к такому атрибуту будет возможно, если вы заранее извлекли его из базы, например, с помощью prefetch_related или select_related (для обращения к атрибуту, который требует обращения к базе, нужен другой API).

В принципе, работа несложная и даже относительно небольшая. Так вот, моя точка зрения, что добавление асинхронности (не ломая старый, синхронный, API) - это так же просто - возможно, за небольшими накладками.

Читать далее

 

» Читати повністю

 

« Наступна новина з архіву
Дзаккерони: В 1998 написал Берлускони отчет об игре Шевченко - нужно немедленно брать
  Попередня новина з архіву
Віртуальну яхту продали у метавсесвіті за рекордні 650 тисяч доларів
»

 

 
© 2025 www.vsinovyny.com