Найти - Пользователи
Полная версия: Как сделать переменную независимой для нескольких пользователей
Начало » Web » Как сделать переменную независимой для нескольких пользователей
1
Period
Есть проект, подключённый к серверу через WSGI:
def wsgi_app(environ, start_response):
	start_response('200 OK', [('Content-Type','text/html; charset=utf-8')])
	page = www.load(environ)
	return [page.encode('utf-8'), ]

Для каждой сгенерированной страницы требуется свой набор подключённых CSS и JS-библиотек.

В любом месте программы я могу вызвать функцию типа use_css(path) или use_jslib(name), аргументы добавятся в список, и в самом конце он будет использован для создания <HEAD>.

Мне не совсем понятно, как это реализовать. Допустим, я создаю модуль registry
css = []
js = []
В течение выполнения программы списки css и js постепенно пополняются.

Проблема в том, что может быть одновременно несколько пользователей.

Предположим, на сайт заходит сразу два человека и запрашивают разные страницы.
У одного пользователя выполняется registry.css.append('main.css'), и у другого выполняется registry.css.append('special.css')

Для каждого пользователя создаётся своя копия registry.css или у обоих пользователей в списке будет два значения?
Period
Ага. Насколько я понял WSGI-сервер не запускает функцию приложения, пока не завершится предыдущая. Обслуживает одного посетителя, и только потом переходит к другому.

Т.е. если всё подчистить в конце, то конфликта не будет.

Тогда другой вопрос. Я не хочу привязываться к одной технологии. Сейчас использую nginx + wsgi. Как работают fastcgi, uwsgi, апачевский mod_wsgi? Тот же самый принцип?
PooH
Каждый запрос отрабатывают в отдельном процессе/потоке, так что все ваши переменные будет локальными для процесса/потока.
Period
Классно. Спасибо. Задача сильно облегчилась. Я уж думал придётся самому потоки организовывать как-то.
PooH
Хочу еще уточнить, в асинхронных фрейморках все соединения обрабатываются в одном потоке, если специально не запускать свой. Но тут пусть более знающие расскажут, я из них только с twisted немного работал.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB