Согласно docs:Поддерживает ли переменная сеанса фляж через потоки?
Сеанс в основном позволяет запоминать информацию от одного запроса к другому.
Но в другом месте, the docs say, что session
является локальным для резьбы. Итак, если flask
используется в многопоточной среде (скажем, app.run(threaded=True)
), как он может выполнить это обещание?
Я вижу только два варианта:
flask
как-то гарантирует, что тот же сеанс пользователя всегда обслуживается в том же потоке (который, кажется ужасным, потому что один просмотр пользователь в двух вкладках придется ждать его первый запрос на завершение до того, как будет обработан второй запрос)session
совершенно бесполезен, если я разрешаю потоки, и мне нужно хранить информацию о сеансе в базе данных (что кажется довольно неожиданным и не упоминается в документах)
Я что-то пропустил?
Edit: Я думаю, еще одна альтернатива:
session
сам по себе является поточно-локальная переменная из питона точки зрения (т.е. питон видитsession
как совершенно независимые объекты каждого потока), но это как-то синхронизированы между потоками наflask
(предположительно, с некоторой структурой данных в глобальной памяти). В этом случаеflask
может внести все изменения вsession
atomic (используя некоторый механизм синхронизации между потоками).
Обновления: на основе @Daniel Роземан ответа, мое последнее предположение было правильно, за исключением колба не делает это самим, а запрашивает у агента пользователя для хранения/извлечения постоянного состояния (и, таким образом, государство не в процесс колбы или за флеш-приложение, но, по сравнению с любой коллекцией запросов, которые пользовательский агент продолжает сохранять, - то, что можно было бы назвать пользовательской сессией).
использует файлы cookie, если вы не используете промежуточное ПО промежуточного сеанса – reptilicus
@reptilicus, но файлы cookie фактически не сохраняют никаких данных состояния для сеанса AFAIK. Единственный хранит уникальный идентификатор сеанса. Любая информация о состоянии должна храниться в переменной 'session'. Поэтому, хотя несколько потоков могут знать, что это один и тот же сеанс, они не будут иметь доступ к данным, записанным в переменной 'session', другими потоками. Это побеждает всю цель переменной 'session'. – max
вы можете хранить все, что хотите в основном.он в основном действует как дикт. – reptilicus