LINUX.ORG.RU

django: запуск процесса с логом

 


0

2

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

Я в джанге нуб полный, но задача не выглядит сложной.

Но нужно сделать так, чтобы для открывающего сессия была уникальной, на запускалась повторно, если прошлая не закончилась, и тп. Не подскажете как такое запилить?

★★★★★

Ответ на: комментарий от Siado

Не, этот туториал я уже прошел.

И процесс у меня запускается, правда через subprocess. И получается мне как-то надо в сессию его pid запомнить - как? И как мне потом лог рефрешить? HTTP рефреш как выставить? У меня вывод не html а text/plain... И как потом помнить, что это уже не новая сессия при релоаде броузера? То есть у меня должна быть пачка фоновых кросс-сессионных объектов, которые знают, закончилось там все, или нет, независимо от действий пользователя.

slapin ★★★★★ ()
Ответ на: комментарий от slapin

И получается мне как-то надо в сессию его pid запомнить - как?

Самый простой вариант - писать самим процессом статус в базу данных. Например, сделать модельку типа:

class ProcessStatus(Model):
   user = ForeignKey(User)
   pid = IntegerField()
   started = BooleanField()
   finished = BooleanField()
   completed = IntegerField()

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

Если хочешь помодней и посложней, то можно сделать на вебсокетах. http://gevent-socketio.readthedocs.org/

provaton ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.