2014-10-21 2 views
3

Я бы хотел, чтобы моя главная задача была огнем в 6 утра каждый день. но для целей тестирования я устанавливаю интервал в 5 секунд. Проблема в том, что она, кажется, никогда не срабатывает. У меня есть точка останова в методе maintask, который никогда не был достигнут, и ничего не печатается на консоли. Я предполагаю, что он не работает.Задача интерферометра apscheduler не работает

ETA: мой код попадает в scheduler.start() где останавливается, потому что он блокируется. он должен начать мою maintask за 5 секунд, но он никогда не делает.

питон версия 2.7 версия apscheduler 3,0

Я запустить его на окнах и Debian же результата.

Вот мой код.

from apscheduler.schedulers.blocking import BlockingScheduler 
import datetime 


def maintask(): 
    print("blah") 


def main(): 

    scheduler = BlockingScheduler() 

    print("Scheduling Tasks") 
    start_time = (datetime.datetime.now()).replace(hour=6, minute=0, second=0, microsecond=0) 
    scheduler.scheduled_job(maintask, 'interval', id="MainTaskid", name="mainTask", start_date=start_time, seconds=5, misfire_grace_time=60) 
    print("Tasks Scheduled") 
    print("Running Tasks") 
    scheduler.start() 
    print("Good Bye") 
    return 0 


if __name__ == "__main__": 
    main() 
+0

Наверняка большая часть этого кода совсем не относится к проблеме. Можете ли вы предоставить нам [минимальный пример] (http://stackoverflow.com/help/mcve)? – abarnert

+0

Также, какую версию APScheduler вы используете? – abarnert

+0

Наконец, у вас есть все эти инструкции регистрации в вашем коде ... так что записывается? Получает ли он «Запуск задач»? Как насчет '« До свидания »? – abarnert

ответ

3

Проблема заключается в том, что вы используете scheduled_job вместо add_job.

Как поясняет User Guide, scheduled_job предназначен в основном как декоратор, так как «удобство объявления заданий, которые не изменяются в течение времени выполнения приложения», в то время как последний является «наиболее распространенным способом» для добавлять задания.

В этом конкретном случае я считаю, что проблема заключается в том, что add_job заставляет планировщик просыпаться, а scheduled_job не делает это, что вы не считаете релевантным, за исключением того факта, что вы полагаетесь на это пробуждение, чтобы заставить проверку пропуска зажигания работать при запуске, а не завтра до 6 утра.

Во всяком случае, просто изменив его на add_job, решает проблему.

+0

ooooh. Я читал, что это был декоратор в руководстве пользователя, но не знал, что это значит. из googling это похоже на оболочку класса, но для функции. – TheColonel26

+0

@ TheColonel26: Декоратор ... является способом применения оболочки класса или оболочки функций к классу или функции во время определения. Я не думаю, что это объясняет это очень хорошо, но это трудно сделать в комментарии, и справочные документы не очень помогают. [PEP 318] (http://legacy.python.org/dev/peps/pep-0318/) более читабельна или просто «учебник по дизайну python», и вы найдете много сообщений в блогах, которые пытаются прояснить ситуацию , – abarnert

+0

@ TheColonel26: короткая версия - это '@ spam', за которой следует' def eggs(): pass' в основном совпадает с 'def eggs(): pass', за которым следует' eggs = spam (eggs) ', если это помогает , Таким образом, 'spam' - это функция, которая принимает функцию, и (обычно) возвращает функцию-оболочку. – abarnert

Смежные вопросы