Глобальное состояние длительного процесса в Джанго - PullRequest
2 голосов
/ 29 января 2010

Мне нужно запустить длительный процесс в ответ на отправку формы в django. Затем я хотел бы иметь возможность опроса с использованием ajax и чтобы представление отображало состояние процесса (запущен, остановлен или запущен). Кроме того, я хочу иметь возможность остановить процесс.

так что мой взгляд выглядит так:

def start()
  . . . 
def stop()
  . . . 
def status()
  . . . 

Этот конкретный вопрос неоднократно рассматривался на SO, но моя ситуация немного отличается: Я ищу решение, которое является полностью питоническим, не требует ничего, чего нет в наличии в django и не требует использование базы данных.

Самое близкое, что я нашел, это этот пост . Я реализовал код и несколько упростил его, но оказалось, что request.session не является глобальным (два браузера имеют разные сессии).

Возможно, моя проблема может быть решена с помощью чего-то другого, кроме request.session, для сохранения состояния start / stop / status, но я понятия не имею, что это будет.

Еще одна возможность, с которой я столкнулся при чтении, - это промежуточное ПО django, но согласно это ,

__ init __ () вызывается только один раз - при запуске сервера - не для отдельных запросы

Здесь также есть запись в блоге здесь , в которой говорится о глобальном состоянии в django. Есть мысли?

Ответы [ 3 ]

1 голос
/ 30 января 2010

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

1 голос
/ 29 января 2010

Один из подходов состоит в том, чтобы запустить отдельный поток и контролировать его через модуль потоков.

0 голосов
/ 22 октября 2011

Вам необходимо использовать структуру очереди задач. Попробуйте это: http://ask.github.com/celery/index.html

...