Найти - Пользователи
Полная версия: Как контролировать длительные процессы?
Начало » Django » Как контролировать длительные процессы?
1 2
plusplus
Посоветуйте решение пожалуйста. Есть скрипт, который парсит данные с разных сайтов в несколько потоков. Сейчас хочу сделать для него web-морду с кнопками запуска/остановки. Каким образом лучше всего этот скрипт запускать/останавливать? Через какие средства?
slav0nic
https://github.com/mozilla-services/circus но сам не юзал, есть старый добрый supervisord, но писан любителями zope B)
plusplus
Что-то примеров по нему крайне мало, нету нигде описания работы с ним?
slav0nic
кроме examples/ в коде, не видел
Lexander
Доки на circus
Lexander
Кстати, хочу уточнить у автора.
Что вы понимаете под средствами?
Речь идет о серверном или клиент-серверном механизме?

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

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

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

P.S. Пока разбираюсь с celery, вроде оно, но может всё гораздо проще?
Lexander
plusplus
заходить в админку на сайте, выставлять настройки, запускать этот скрипт, иметь возможности любой момент остановить и т.д. Я просто не знаю как это делается, если дело касается веба.
Управление скрипт-парсером скриптом с сервера - серверная часть.

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

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

Celery - вещь хорошая.
К Джанго прикручивается через django-celery.
Но вам еще потребуется брокер сообщений.
Только у вас вроде бы все на одной машине. Смысл использовать celery есть, если собираетесь со временем масштабироваться до нескольких серверов, иначе ее функционал избыточен.
plusplus
Наверное да, действительно избыточно. Тогда вот такой вариант. Остановился на sh. Как я себе это представляю. Пользователь заходит на сайт, нажимает кнопку “Запуск”, во вью срабатывает код, что-то вроде
process = sh.python('parser.py', _bg=True)
#Сохраняем в базе
pid = process.pid

Затем если пользователь захотел остановить скрипт, то мы считываем pid из базы и делаем ему kill -9? Или это очень плохо и лучше бы останавливать скрипт более корректно, например поместив какой-либо флаг остановки в базу?
plusplus
Как оказалось вообще пришел к такому вопросу, а зачем вообще нужны сторонние модули? Почему нельзя воспользоваться встроенным - subprocess.Popen?

С sh проблемы, при указании запускать в бекграунде, веб-страница всё равно блокируется.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB