Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как контролировать длительные процессы? [RSS Feed]

#1 Сен. 25, 2012 15:45:44

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

Посоветуйте решение пожалуйста. Есть скрипт, который парсит данные с разных сайтов в несколько потоков. Сейчас хочу сделать для него web-морду с кнопками запуска/остановки. Каким образом лучше всего этот скрипт запускать/останавливать? Через какие средства?



Офлайн

#2 Сен. 25, 2012 22:25:13

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

https://github.com/mozilla-services/circus но сам не юзал, есть старый добрый supervisord, но писан любителями zope B)

Офлайн

#3 Сен. 26, 2012 09:25:50

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

Что-то примеров по нему крайне мало, нету нигде описания работы с ним?



Офлайн

#4 Сен. 26, 2012 10:05:21

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

кроме examples/ в коде, не видел

Офлайн

#5 Сен. 26, 2012 14:09:50

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

Офлайн

#6 Сен. 26, 2012 14:24:46

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

Кстати, хочу уточнить у автора.
Что вы понимаете под средствами?
Речь идет о серверном или клиент-серверном механизме?

Одно дело, если вам нужно просто управлять процессами на серверной стороне.
Другое, полностью реализовать взаимодействие между клиентом и сервером.

Если только первое, то еще посмотрите sh и execnet.

Если второе, есть 2 варианта: WebSockets и обычный периодический опрос сервера. Тут вопрос требует развернутого ответа и поэтому для начала неплохо почитать о достоинствах/недостатках и сделать однозначный выбор.



Офлайн

#7 Сен. 26, 2012 15:24:44

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

По-моему клиент-серверный, но я, честно говоря не понял. То что я хочу, я написал в первом посте, мне казалось там всё понятно и просто. Попробую поподробней. У меня есть консольный скрипт-парсер, который работает в несколько потоков и довольно долго (несколько часов, может пару дней). Я могу реализовать GUI в этом скрипте, то есть у меня будет окошечко или несколко с кнопками запуска/остановки, может быть какие-то отчеты, просмотр логов и т.д. Ну вот, собственно, мне это и надо, только вместо GUI нужен веб. Я хочу запускать скрипт не из консоли, а заходить в админку на сайте, выставлять настройки, запускать этот скрипт, иметь возможности любой момент остановить и т.д. Я просто не знаю как это делается, если дело касается веба.

P.S. Пока разбираюсь с celery, вроде оно, но может всё гораздо проще?



Отредактировано plusplus (Сен. 26, 2012 15:25:38)

Офлайн

#8 Сен. 26, 2012 19:49:47

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

plusplus
заходить в админку на сайте, выставлять настройки, запускать этот скрипт, иметь возможности любой момент остановить и т.д. Я просто не знаю как это делается, если дело касается веба.
Управление скрипт-парсером скриптом с сервера - серверная часть.

К ней может быть подключен web-клиент в режиме постоянного соединения с управляющим скриптом - тогда вопрос может касаться и клиента (интерфейс управления в браузере), и сервера.
Имеет как ряд преимуществ, так и ряд недостатков.

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

Celery - вещь хорошая.
К Джанго прикручивается через django-celery.
Но вам еще потребуется брокер сообщений.
Только у вас вроде бы все на одной машине. Смысл использовать celery есть, если собираетесь со временем масштабироваться до нескольких серверов, иначе ее функционал избыточен.



Офлайн

#9 Сен. 27, 2012 08:16:29

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

Наверное да, действительно избыточно. Тогда вот такой вариант. Остановился на sh. Как я себе это представляю. Пользователь заходит на сайт, нажимает кнопку “Запуск”, во вью срабатывает код, что-то вроде

process = sh.python('parser.py', _bg=True)
#Сохраняем в базе
pid = process.pid

Затем если пользователь захотел остановить скрипт, то мы считываем pid из базы и делаем ему kill -9? Или это очень плохо и лучше бы останавливать скрипт более корректно, например поместив какой-либо флаг остановки в базу?



Офлайн

#10 Сен. 27, 2012 10:49:52

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Как контролировать длительные процессы?

Как оказалось вообще пришел к такому вопросу, а зачем вообще нужны сторонние модули? Почему нельзя воспользоваться встроенным - subprocess.Popen?

С sh проблемы, при указании запускать в бекграунде, веб-страница всё равно блокируется.



Отредактировано plusplus (Сен. 27, 2012 11:38:10)

Офлайн

  • Начало
  • » Django
  • » Как контролировать длительные процессы?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version