Альтернатива python crontab - APScheduler & python-daemon

У меня возникли проблемы с использованием Python- Daemon 1.6 и APScheduler для управления списком задач.

(Планировщик должен запускать их периодически в определенное выбранное время - с разрешением в секундах)

Работает (до нажатия Ctrl+C),

from apscheduler.scheduler import Scheduler
import logging
import signal

def job_function():
    print "Hello World"

def init_schedule():
        logging.basicConfig(level=logging.DEBUG)
        sched = Scheduler()
        # Start the scheduler
        sched.start()

        return sched

def schedule_job(sched, function, periodicity, start_time):
        sched.add_interval_job(job_function, seconds=periodicity, start_date=start_time)

if __name__ == "__main__":

    sched = init_schedule()
    schedule_job(sched, job_function, 120, '2011-10-06 12:30:09')
    schedule_job(sched, job_function, 120, '2011-10-06 12:31:03')

    # APSScheduler.Scheduler only works until the main thread exits
    signal.pause()
    # Or
    #time.sleep(300)

Пример вывода:

ИНФОРМАЦИЯ: apscheduler.threadpool: Запущенный пул потоков с 0 основными потоками и 20 максимальными потоками ИНФОРМАЦИЯ: apscheduler.scheduler: Запущен планировщик DEBUG:apscheduler.scheduler: Поиск рабочих мест для запуска DEBUG:apscheduler.scheduler: Нет заданий; ожидание добавления задания INFO:apscheduler.scheduler: добавлено задание "job_function (триггер: интервал [0:00:30], следующий запуск в: 2011-10-06 18:30:39)" в хранилище заданий "default" ИНФОРМАЦИЯ: apscheduler.scheduler: добавлено задание "job_function (триггер: интервал [0:00:30], следующий запуск в: 2011-10-06 18:30:33)" в хранилище заданий "по умолчанию" DEBUG:apscheduler.scheduler: Поиск рабочих мест для запуска DEBUG:apscheduler.scheduler: Следующее пробуждение должно произойти в 2011-10-06 18:30:33 (через 10.441128 секунд)

С python-daemon вывод пуст. Почему DaemonContext неправильно порождает процессы?

РЕДАКТИРОВАТЬ - Рабочая

После прочтения исходного кода python-daemon я добавил stdout и stderr в DaemonContext и, наконец, смог узнать, что происходит.

def job_function():
    print "Hello World"
    print >> test_log, "Hello World"

def init_schedule():
    logging.basicConfig(level=logging.DEBUG)
    sched = Scheduler()
    sched.start()

    return sched

def schedule_job(sched, function, periodicity, start_time):
    sched.add_interval_job(job_function, seconds=periodicity, start_date=start_time)

if __name__ == "__main__":

    test_log = open('daemon.log', 'w')
    daemon.DaemonContext.files_preserve = [test_log]

    try:
           with daemon.DaemonContext():
                   from datetime import datetime
                   from apscheduler.scheduler import Scheduler
                   import signal

                   logging.basicConfig(level=logging.DEBUG)
                   sched = init_schedule()

                   schedule_job(sched, job_function, 120, '2011-10-06 12:30:09')
                   schedule_job(sched, job_function, 120, '2011-10-06 12:31:03')

                   signal.pause()

    except Exception, e:
           print e

1 ответ

Я не знаю много о Python-демоне, но test_log в job_function() не определено. Та же проблема возникает в init_schedule() где вы ссылаетесь Schedule,

Другие вопросы по тегам