#python #django #django-rest-framework #atomic
Вопрос:
Я работаю над проектом, в котором используется Django
и. Django REST Framework
В одном из представлений есть метод F()
, который выполняет следующее:
- Извлекает данные из базы данных (операция чтения)
- Отправляет запрос на создание (публикацию) в сторонний API. (хотя это и не локально, это операция записи, и именно здесь может возникнуть условие гонки)
- Возвращает данные JSON
Я хотел бы F()
быть атомарным, другими словами, если сервер получает несколько запросов одновременно с запросом на это представление, сервер должен обрабатывать один запрос за раз и не разрешать нескольким потокам одновременно обращаться к этому блоку кода. Как этого можно достичь? Я читал Django
, что это обеспечивает, transactions.atomic()
но это гарантирует атомарность транзакций базы данных, мне нужна атомарность для целого блока кода, независимо от того, обращается он к базе данных или нет.
Ответ №1:
Концепция, которую вы ищете, — это «мьютекс» или «блокировка». Эта статья может направить вас в правильном направлении https://lincolnloop.com/blog/distributed-locking-django/
Комментарии:
1. Спасибо, я посмотрю на это, но я подожду других ответов, если этого можно достичь без использования сторонних библиотек/фреймворков