Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Как сделать переменную независимой для нескольких пользователей [RSS Feed]

#1 Янв. 4, 2016 17:13:21

Period
Зарегистрирован: 2015-10-07
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать переменную независимой для нескольких пользователей

Есть проект, подключённый к серверу через 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 или у обоих пользователей в списке будет два значения?

Офлайн

#2 Янв. 4, 2016 19:26:09

Period
Зарегистрирован: 2015-10-07
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать переменную независимой для нескольких пользователей

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

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

Тогда другой вопрос. Я не хочу привязываться к одной технологии. Сейчас использую nginx + wsgi. Как работают fastcgi, uwsgi, апачевский mod_wsgi? Тот же самый принцип?

Офлайн

#3 Янв. 5, 2016 18:03:11

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Как сделать переменную независимой для нескольких пользователей

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



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#4 Янв. 5, 2016 19:23:49

Period
Зарегистрирован: 2015-10-07
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать переменную независимой для нескольких пользователей

Классно. Спасибо. Задача сильно облегчилась. Я уж думал придётся самому потоки организовывать как-то.

Офлайн

#5 Янв. 5, 2016 20:49:39

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Как сделать переменную независимой для нескольких пользователей

Хочу еще уточнить, в асинхронных фрейморках все соединения обрабатываются в одном потоке, если специально не запускать свой. Но тут пусть более знающие расскажут, я из них только с twisted немного работал.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

  • Начало
  • » Web
  • » Как сделать переменную независимой для нескольких пользователей[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version