Обеспечьте использование одноэлементной переменной во всем веб-приложении.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Обеспечьте использование одноэлементной переменной во всем веб-приложении.

Сообщение Anonymous »

Справочная информация
Мое веб-приложение построено на основе асинхронного FastAPI. Сервер, развертывающий это приложение, запустит 4 рабочих процесса, и каждый рабочий запустит 2 потока для обработки одновременных запросов.
Описание
Большинство служб в моем веб-приложении в значительной степени полагаться на токен, требуемый от внешнего API. Проблема в том, что этот токен имеет определенный срок действия, а это означает, что мне придется получить его снова, когда истечет срок действия существующего.
Чтобы предотвратить многократное обновление токена, я сделал это следующие вещи:
  • Кэшируйте токен в базе данных MySQL, чтобы я мог получить доступ к токену в течение срока действия, не вызывая API.
  • После истечения срока действия существующего токена Я применяю asyncio.Lock ко всем сопрограммам, чтобы гарантировать, что только одна сопрограмма может выполнять операцию выборки.
Проблемы
Вышеописанный подход решил проблему, но скрыл скрытую проблему. Поскольку я сохранил токен в базе данных MySQL, мне придется держать соединения открытыми в течение всей операции обновления (это плохой подход, как указано в документации SQLAlchemy). Обратившись к документации Python, я понял, что применение asyncio.Lock в веб-приложении с несколькими потоками не является подходящим решением.
В результате я рассматриваю возможность кэширование токена в Redis. Но тогда как мне правильно заблокировать операцию обновления, чтобы в Redis существовал только один токен даже в среде с высоким уровнем параллелизма?

Подробнее здесь: https://stackoverflow.com/questions/792 ... re-web-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»