Вот прямо щас пишу демона для Asterisk на питоне, смотрю в этот гайд http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
Суть работы: Когда демону приходит задание (json-объект) он либо откладывает его, либо начинает выполнять сразу (создание некоторого количества файлов в /tmp, перемещение их в определенную папку и её мониторинг на предмет их изменения/исчезновения). На протяжении всей работы он должен знать какие задания у него сейчас есть, какие он выполнил и что делает сейчас. После экстренного выключения / остановки он должен не терять эти самые задания. В любой момент работы он может получить запрос состояния, на который он должен вернуть json-документ со списком заданий и ходом выполнения.
Демона пишу первый раз, пока не уверен что выбрал правильный путь. Чтобы хранить задания, нужно внешнее хранилище. Я хочу использовать mongodb.
Как правильно организовать хранение списка выполняющихся задач?
Можно вообще всё общение сделать через mongo - новое задание сразу класть в mongo (вообще не использовать внутренние переменные) и начинать его выполнение. После выполнения каждого шага, делать запись в mongo. На любой запрос - брать данные из mongo. Таким образом, при аварийном завершении, я легко восстановлю состояние работы и списки задач.
Если же на каждое задание создавать экземпляр класса, хранить список этих экземпляров, то при завершении работы все данные будут утеряны.
Я правильно понимаю?
и второй вопрос: как общаться с python демоном посредством json? Просто получать его как строку через argv и дальше преобразовывать в объект?
p.s. демон будет вызываться только вебсервером, поэтому интересует системное, а не сетевое взаимодействие