Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2013 06:49:37

CommonUser
Зарегистрирован: 2013-02-25
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание задач через веб интерфейс.

У меня есть скрипт на питоне, который выполняется на хосте. Мне нужно стартовать (1) некоторое количество этих скриптов, создавая задачи (параметры к скрипту) с веб страницы. При этом, скрипт может выполняться или пока не упадет, или пока не остановишь. Нужно знать в каком состоянии (2) находится задача, то есть выполнение скрипта, но и возможность остановить (3) выполнение скрипта с веб странички. Иногда нужно получать результат (4), который выдает скрипт (словарь например), а не просто “таска упала” или “выполнилась успешно”. Сам скрипт коммитит в бд (5), а сайт использует эту бд для создания отчетов (6).
Возможно, мне понадобиться “общаться” с выполняемыми задачами (7)

Пока у меня нет понимания как построить архитектуру этого приложения.
Я думаю, сайт складывает в БД-для-задач задачи, “менеджер” мониторит эту БД по расписанию, достает задачи и запускает скрипты на исполнение. Скрипт записывает в БД-для-отчетов результаты выполнения. Сайт берет из БД записи и формирует полный отчет.

Как останавливать задачу с сайта? Скажем у задач есть состояния NEW, STARTED, CANCELED, COMPLETED. Тогда с сайта можно менять состояние задачи в БД на CANCELED. Но тогда придётся на стороне сайта постоянно опрашивать состояния этих задач в . В общем начинаются большие проблемы с синхронизацией.

Другая проблема это общение “менеждера” с множеством запущенных задач. Общение должно быть двухстороннее. Потому как я хочу получать уведомления и данные от задачи. И подавать сигнал, скажем, на остановку задачи. Думаю общение можно сделать с помощью 0MQ (ZeroMQ)

Как-то так. Очень большая вероятность, что тут у меня велосипед на велосипеде. Подскажите что можно придумать для решения моей задачи.

Офлайн

#2 Март 22, 2013 09:58:29

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

Создание задач через веб интерфейс.

Я про celery слышал. Посмотри, может подойдет.



Офлайн

#3 Март 22, 2013 10:28:57

CommonUser
Зарегистрирован: 2013-02-25
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание задач через веб интерфейс.

сельдерей не подходит, сельдерей может только запускать таски и узнавать выполнилось или нет. То есть он решает только подзадачу (1), но не решает все остальные. Завершение только экстренное через revoke(task_id, terminate=True, signal=SIGTERM). Мне нужно завершать задачи мягко, чтобы сделать клинап (соединение с бд. освобождение ресурсов, закрытие файлов и убийство детей, и прочее)

Офлайн

#4 Март 22, 2013 10:30:56

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Создание задач через веб интерфейс.

Я бы наверно на Mongodb сделал.

Отредактировано Singularity (Март 22, 2013 10:31:23)

Офлайн

#5 Март 22, 2013 11:42:05

CommonUser
Зарегистрирован: 2013-02-25
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание задач через веб интерфейс.

Singularity
Я бы наверно на Mongodb сделал.

Можете немного подробнее объяснить? Я не знаком с монго. Что с помощью монго я могу решить?

Офлайн

#6 Март 22, 2013 13:52:22

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

Создание задач через веб интерфейс.

CommonUser
сельдерей не подходит, сельдерей может только запускать таски и узнавать выполнилось или нет.
У celery есть целая куча состояний задачи, включающих метаданные (сюда можно записать результат выполнения: результат, трейс ошибки и пр.) плюс можно добавлять свои.
CommonUser
Завершение только экстренное через revoke(task_id, terminate=True, signal=SIGTERM). Мне нужно завершать задачи мягко, чтобы сделать клинап (соединение с бд. освобождение ресурсов, закрытие файлов и убийство детей, и прочее)
А это уже как вы воркеры писать будете.
Для общения с воркерами есть механизм событий, на которые воркер может быть подписан и они будут обработаны так как вам нужно.
Готового решения лично я не искал, но, учитывая типичность задачи и наличие нужных инструментов в celery, рекомендую поискать в интернете - должно быть.

Думаю, что связка Celery + RabbitMQ или другой транспорт вам может подойти.
Я бы рекомендовал вам потратить чуть больше времени на анализ их возможностей.
В документации и есть готовые примеры как раз для вашей задачи.



Офлайн

#7 Март 22, 2013 17:00:56

CommonUser
Зарегистрирован: 2013-02-25
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание задач через веб интерфейс.

Что-то я не нашел как писать свой собственный воркер. Вообще мне не нравится документация сельдерея, она написана как-то невнятно местами.

Всеже мне кажется, что сельдерей используется для рутинных задач, таких как послать письмо, почистить базы (удалить неактивных пользователей и проч) и подобное. То есть задачи типа запустил и забыл.

Отредактировано CommonUser (Март 22, 2013 17:11:25)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version