глобальные переменные в django

программирование базы данных python django

Я пишу что то типа танчиков на html5, управление осуществляется посредством http запроса на каждое нажатие клавиши + от клиента каждые 20 секунд идет длинный запрос (long polling) ответ на который сервак дает если кто-нибудь из других игроков передвинул свой танк. Обсчет изменений координат танчиков происходит на сервере и после обсчета он выдает новые координаты всех танков в json формате клиенту.

Что имеем.

Несколько функций для разных URL-ов (для вызова по загрузке сайта - game, по обработке "длинного запроса" -wait и по обработке нажатия клавиши -step)

переменную tanks которая представляет собой list для хранения координат всех танчиков.

И проблему: tanks у меня объявлена как глобальная переменная в модуле где содержатся функции для URL-ов. И как я понял анатомию джанги этот модуль спокойно может выгружаться из памяти, или иметь разные экземпляры tanks для разных функций. Собственно последнее и происходит - при нажатии клавиш функция step отдает новые правильные данные, которые показываются несколько секунд до тех пор пока не придут данные из wait (которая отдает их по таймауту хотя должна отдать их в тот момент когда произошла смена координат, wait узнает о том что что-то изменилось через глобальную переменную last_event_time которая из-за вышеописанной проблемы разная у wait и step).

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

Я вижу несколько вариантов решения этой проблемы:
1)хранить данные в файле/базе данных и при вызове каждой функции загружать и парсить файл, а потом записывать обратно.
Но моя си-шная душа, страдает от понимания того, сколько лишних тактов придется делать что бы считывать и парсить классы из базы данных (ну или из какого-нибудь файла) при каждом вызове функции, да и придется писать лишний код, к тому же это ужасно некрасиво.

2)объявить глобальную переменную в settings.py и как то разрешить модулям менять ее. Но я не представляю как это сделать.

Как тут все правильно решить?
Спасибо.

Примечание:
Проблему можно сформулировать проще:
Есть две функции для URLов
Есть переменная которая должна меняться при вызове этих функций.
Как это осуществить?

Вот казалось бы все элементарно, но я с этим вопрос уже 2й день мучаюсь.
Ответы:
Каждый запрос обрабатывается разными экземплярами джанги.
И хоть как ты переменные не объявляй на новый запрос (нового клиента) данные будут разные (старое значение будет потеряно). В любом случае где-то нужно эти данные хранить (база, файл, куки, etc).
Или можно попробовать gevent или tornado. Там вроде можно такое сделать без дополнительного хранилища (не уверен).


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.