2016-02-29 3 views
1

Я пытаюсь использовать MongoJobStoreexample APS. Пример кода:APScheduler Работа не запускается после перезапуска

import logging 
import os 
import sys 
from datetime import datetime, timedelta 

from apscheduler.schedulers.blocking import BlockingScheduler 

logging.basicConfig() 


def alarm(time): 
    print('Alarm! This alarm was scheduled at %s.' % time) 


if __name__ == '__main__': 
    scheduler = BlockingScheduler() 
    scheduler.add_jobstore('mongodb', collection='example_jobs', host='192.168.0.108', port=27017) 

    if len(sys.argv) > 1 and sys.argv[1] == '--clear': 
     scheduler.remove_all_jobs() 

    alarm_time = datetime.now() + timedelta(seconds=10) 
    # scheduler.add_job(alarm, 'date', run_date=alarm_time, args=[datetime.now()], id="la") 
    print('To clear the alarms, run this example with the --clear argument.') 
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C')) 

    scheduler.start() 

Во-первых, чтобы проверить, я побежал код и выход метода alarm был напечатан на консоли. Затем, чтобы проверить использование монго, я сделал следующее:

  1. Отказался от примера и остановил его перед выполнением задания.
  2. Это создало следующую запись в БД

    > db.example_jobs.find().pretty() 
    { 
        "_id" : "la", 
        "next_run_time" : 1456771825.792437, 
        "job_state" : BinData(0,"gAJ9cQEoVQRhcmdzcQJjZGF0ZXRpbWUKZGF0ZXRpbWUKcQNVCgfgAwEAFA8MF4SFUnEEhXEFVQhleGVjdXRvcnEGVQdkZWZhdWx0cQdVDW1heF9pbnN0YW5jZXNxCEsBVQRmdW5jcQlVDl9fbWFpbl9fOmFsYXJtcQpVAmlkcQtVAmxhcQxVDW5leHRfcnVuX3RpbWVxDWgDVQoH4AMBABQZDBd1Y3B5dHoKX3AKcQ4oVQxBc2lhL0tvbGthdGFxD01YTUsAVQNJU1RxEHRScRGGUnESVQRuYW1lcRNVBWFsYXJtcRRVEm1pc2ZpcmVfZ3JhY2VfdGltZXEVSwFVB3RyaWdnZXJxFmNhcHNjaGVkdWxlci50cmlnZ2Vycy5kYXRlCkRhdGVUcmlnZ2VyCnEXKYFxGH1xGX1xGlUIcnVuX2RhdGVxG2gSc4ZiVQhjb2FsZXNjZXEciFUHdmVyc2lvbnEdSwFVBmt3YXJnc3EefXEfdS4=") 
    } 
    
  3. Затем я заметил линию, которая добавляла работу: # scheduler.add_job(alarm, 'date', run_date=alarm_time, args=[datetime.now()], id="la")

  4. Затем я снова побежал сценарий и получил следующий вывод:

    To clear the alarms, run this example with the --clear argument. 
    Press Ctrl+C to exit 
    WARNING:apscheduler.executors.default:Run time of job "alarm (trigger: date[2016-03-01 00:35:27 IST], next run at: 2016-03-01 00:35:27 IST)" was missed by 0:00:19.290825 
    
  5. Выход функции alarm не печатается и запись удаляется от дБ.

Я пытался отладки второй прогон, код считывает задания из БД, а затем представить его на threadpool. Но вывод не выводится.

Почему это может произойти?

+0

Могу ли я спросить, как вы установили регистратор по умолчанию? Я не могу понять и всегда запрашивает сообщение типа «не удается найти logger apscheduler.executors.default». – FaithReaper

ответ

1

Вопрос был misfire_grace_time (doc). Я этого не задал. На самом деле он не был установлен даже в самом примере.

Рабочий код:

import logging 
import os 
import sys 
from datetime import datetime, timedelta 

from apscheduler.schedulers.blocking import BlockingScheduler 

logging.basicConfig() 


def alarm(time): 
    print('Alarm! This alarm was scheduled at %s.' % time) 


if __name__ == '__main__': 
    scheduler = BlockingScheduler() 
    scheduler.add_jobstore('mongodb', collection='example_jobs', host='192.168.0.108', port=27017) 

    if len(sys.argv) > 1 and sys.argv[1] == '--clear': 
     scheduler.remove_all_jobs() 

    alarm_time = datetime.now() + timedelta(seconds=10) 
    scheduler.add_job(alarm, 'date', run_date=alarm_time, args=[datetime.now()], id="la", misfire_grace_time=1000) 
    print('To clear the alarms, run this example with the --clear argument.') 
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C')) 

    scheduler.start() 

Я получил этот ответ от IRC канала APS в #apscheduler. @agronholm помог мне.

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

  • Нет связанных вопросов^_^