Форум сайта python.su
Я нашел шаблон демона
http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
Скажите, а он сможет решить мою проблему?
Я так понимаю это и есть реализация библиотеки, о которой шла речь выше.
Код мне свой нужно впиндерить сюда:
def restart(self):
"""
Restart the daemon
"""
self.stop()
self.start()
def run(self):
"""
You should override this method when you subclass Daemon. It will be called after the process has been
daemonized by start() or restart().
"""
Офлайн
Если есть задача сделать так чтобы процесс работал после того как прервется сессия
Есть два варианта:
1 - Демон. Он влечет за собой усложнение / увеличения кода. На мой взглад лучше использовать этот подход только когда именно нужен демон - то есть процесс работающий в бекграунде.
2 - Запуск скрипта с nohup или через screen / tmux - самый простой вариант.
Офлайн
s0rgРасскажи пожалуйста поподробнее, как работает демон.
Если есть задача сделать так чтобы процесс работал после того как прервется сессия
Есть два варианта:
1 - Демон. Он влечет за собой усложнение / увеличения кода. На мой взглад лучше использовать этот подход только когда именно нужен демон - то есть процесс работающий в бекграунде.
2 - Запуск скрипта с nohup или через screen / tmux - самый простой вариант.
Офлайн
s0rg, можешь книжку посоветовать по питону?
Хочу начать что-то одно читать, но уже очень долго не могу выбрать.
Офлайн
Классический демон делает следующее:
1. Вызывает функцию fork() и завершает родителя.
2. В ребенке закрывает и перенаправляет stdin / stdout / stderr, устанавливает права, маски и группу процессов.
3. Устанавливает обработчики сигналов.
4. Начинает выполнение основного цикла в котором и выполняет всю работу
(если он должен делать эту работу периодически - то да, можно и sleep воткнуть).
Это только ‘на пальцах’. Подробнее - у Стивенса.
Просто задачу ‘сделать так чтобы программа работала после закрытия терминала’ можно решить намного проще.
Офлайн
s0rgСпасибо за информацию, полезно.
Просто задачу ‘сделать так чтобы программа работала после закрытия терминала’ можно решить намного проще.
Офлайн
Ну написал же )
nohup
а еще лучше - screen или tmux если *bsd
Отредактировано (Дек. 28, 2011 23:37:04)
Офлайн
А можно сделать, чтобы они выполнялась каждые 5 минут?
без time.sleep?
s0rgЯ просто был немного заинтригован =)
Ну написал же )
nohup
а еще лучше - screen или tmux или *bsd
Отредактировано (Дек. 28, 2011 23:37:35)
Офлайн
xxnikolayxxcron
А можно сделать, чтобы они выполнялась каждые 5 минут?
без time.sleep?
Офлайн
на самом деле периодическое выполнение делают планировщики
http://docs.python.org/library/sched.html - это встроенный попроще
http://packages.python.org/APScheduler/ - этот чуток посложнее - может работать и как cron
Если ими пользоваться то в отличии от cron сохраняется контекст процесса - те данные между сессиями можно в питоне хранить.
Я кстати сделал расширенный планировщик - c gui и без оного особенность которого была в том что он при запуске запланированных задачек обрабатывал ограниченность ресурсов машины. Например не пускал слишком много процессов, учитывал занятость файлов ограниченность количества коннектов к базам и т.п.
p.s.
без time.sleep?
А зачем? Внутренняя реализация - второго - треды и почти наверняка wait for timer.
Отредактировано (Дек. 29, 2011 17:35:55)
Офлайн