Как я могу обслуживать уникальные поля из таблицы базы данных в несколько потоков с Flask, Python3 и Flask -SQLAlchemy? - PullRequest
0 голосов
/ 30 апреля 2020

Я создаю приложение с Flask и Flask -SQLAlchemy, которое обслуживает текстовые документы. WSGI, с которым я развертываю приложение, заблокирован в многопоточности. Очень важно, чтобы каждый текстовый документ обслуживался только одному пользователю за раз, хотя я не знаю, сколько у меня будет пользователей или когда они получат доступ к приложению.

Другими словами , если 2+ пользователя одновременно получают доступ к приложению, которое затем запрашивает базу данных в 2+ потоках, как я могу гарантировать, что каждый пользователь получает разные документы? Я бы предпочел использовать SQLite, но при необходимости можно также использовать MySQL.

ОБНОВЛЕНИЕ:

Я много об этом читал и не могу найти четкого ответа. Мое понимание может быть неправильным, но вот как я понимаю проблему:

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

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

Проблема заключается в том, что другой поток запрашивает документ, прежде чем первый сможет записать измененный извлеченный логический тип. В этом случае второй поток может отправить тот же документ своему пользователю, что и первый поток, поскольку его извлеченное логическое значение все еще равно false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...