Форум сайта python.su
У меня есть скрипт на питоне, который выполняется на хосте. Мне нужно стартовать (1) некоторое количество этих скриптов, создавая задачи (параметры к скрипту) с веб страницы. При этом, скрипт может выполняться или пока не упадет, или пока не остановишь. Нужно знать в каком состоянии (2) находится задача, то есть выполнение скрипта, но и возможность остановить (3) выполнение скрипта с веб странички. Иногда нужно получать результат (4), который выдает скрипт (словарь например), а не просто “таска упала” или “выполнилась успешно”. Сам скрипт коммитит в бд (5), а сайт использует эту бд для создания отчетов (6).
Возможно, мне понадобиться “общаться” с выполняемыми задачами (7)
Пока у меня нет понимания как построить архитектуру этого приложения.
Я думаю, сайт складывает в БД-для-задач задачи, “менеджер” мониторит эту БД по расписанию, достает задачи и запускает скрипты на исполнение. Скрипт записывает в БД-для-отчетов результаты выполнения. Сайт берет из БД записи и формирует полный отчет.
Как останавливать задачу с сайта? Скажем у задач есть состояния NEW, STARTED, CANCELED, COMPLETED. Тогда с сайта можно менять состояние задачи в БД на CANCELED. Но тогда придётся на стороне сайта постоянно опрашивать состояния этих задач в . В общем начинаются большие проблемы с синхронизацией.
Другая проблема это общение “менеждера” с множеством запущенных задач. Общение должно быть двухстороннее. Потому как я хочу получать уведомления и данные от задачи. И подавать сигнал, скажем, на остановку задачи. Думаю общение можно сделать с помощью 0MQ (ZeroMQ)
Как-то так. Очень большая вероятность, что тут у меня велосипед на велосипеде. Подскажите что можно придумать для решения моей задачи.
Офлайн
Я про celery слышал. Посмотри, может подойдет.
Офлайн
сельдерей не подходит, сельдерей может только запускать таски и узнавать выполнилось или нет. То есть он решает только подзадачу (1), но не решает все остальные. Завершение только экстренное через revoke(task_id, terminate=True, signal=SIGTERM). Мне нужно завершать задачи мягко, чтобы сделать клинап (соединение с бд. освобождение ресурсов, закрытие файлов и убийство детей, и прочее)
Офлайн
Я бы наверно на Mongodb сделал.
Отредактировано Singularity (Март 22, 2013 10:31:23)
Офлайн
Singularity
Я бы наверно на Mongodb сделал.
Офлайн
CommonUserУ celery есть целая куча состояний задачи, включающих метаданные (сюда можно записать результат выполнения: результат, трейс ошибки и пр.) плюс можно добавлять свои.
сельдерей не подходит, сельдерей может только запускать таски и узнавать выполнилось или нет.
CommonUserА это уже как вы воркеры писать будете.
Завершение только экстренное через revoke(task_id, terminate=True, signal=SIGTERM). Мне нужно завершать задачи мягко, чтобы сделать клинап (соединение с бд. освобождение ресурсов, закрытие файлов и убийство детей, и прочее)
Офлайн
Что-то я не нашел как писать свой собственный воркер. Вообще мне не нравится документация сельдерея, она написана как-то невнятно местами.
Всеже мне кажется, что сельдерей используется для рутинных задач, таких как послать письмо, почистить базы (удалить неактивных пользователей и проч) и подобное. То есть задачи типа запустил и забыл.
Отредактировано CommonUser (Март 22, 2013 17:11:25)
Офлайн