Я создаю приложение с Flask и Flask -SQLAlchemy, которое обслуживает текстовые документы. WSGI, с которым я развертываю приложение, заблокирован в многопоточности. Очень важно, чтобы каждый текстовый документ обслуживался только одному пользователю за раз, хотя я не знаю, сколько у меня будет пользователей или когда они получат доступ к приложению.
Другими словами , если 2+ пользователя одновременно получают доступ к приложению, которое затем запрашивает базу данных в 2+ потоках, как я могу гарантировать, что каждый пользователь получает разные документы? Я бы предпочел использовать SQLite, но при необходимости можно также использовать MySQL.
ОБНОВЛЕНИЕ:
Я много об этом читал и не могу найти четкого ответа. Мое понимание может быть неправильным, но вот как я понимаю проблему:
Когда один поток читает из базы данных, он получает данные, как они существуют в тот момент. Если другой поток затем что-то изменяет в базе данных, тогда данные первого потока потенциально устарели, но не обновляются автоматически. Это становится проблемой, когда первый поток должен принять решение о данных в том виде, в каком они есть в реальном времени, и теперь он содержит старые данные.
В моем случае я считаю, что каждый документ может иметь "извлеченный" логическое значение. При запросе нового документа поток получает все неопакованные документы, выбирает один случайным образом, устанавливает для извлеченного логического значения значение true, записывает изменение в базу данных, а затем возвращает документ пользователю.
Проблема заключается в том, что другой поток запрашивает документ, прежде чем первый сможет записать измененный извлеченный логический тип. В этом случае второй поток может отправить тот же документ своему пользователю, что и первый поток, поскольку его извлеченное логическое значение все еще равно false.