APScheduler на Pthon 3.5 - Ошибка при получении должных заданий из хранилища вакансий - PullRequest
0 голосов
/ 12 ноября 2018

Получаю следующее предупреждающее сообщение от APScheduler v3.5.3, и я не могу найти причину.

WARNING:apscheduler.scheduler:Error getting due jobs from job store 'default': descriptor 'date' requires a 'datetime.datetime' object but received a 'int'


Программа, в которой у меня возникла эта проблема, была изначально написана для Python 2.7 и в настоящее время переписывается для Python 3.5

После того, как я включил ведение журнала для APScheduler, я вижу, что задание добавляется в хранилище заданий с именем «default».

INFO:apscheduler.scheduler:Scheduler started
DEBUG:apscheduler.scheduler:Looking for jobs to run
DEBUG:apscheduler.scheduler:No jobs; waiting until a job is added
INFO:apscheduler.scheduler:Added job "Notifier.gather" to job store "default"
DEBUG:apscheduler.scheduler:Looking for jobs to run
DEBUG:apscheduler.scheduler:Next wakeup is due at 2018-11-11 18:33:32.954753-05:00 (in 29.996986 seconds)


Примерно через 30 секунд эти сообщения отображаются. Они повторяются каждые 10 секунд вместо ожидаемых 30 секунд.

DEBUG:apscheduler.scheduler:Looking for jobs to run
WARNING:apscheduler.scheduler:Error getting due jobs from job store 'default': descriptor 'date' requires a 'datetime.datetime' object but received a 'int'
DEBUG:apscheduler.scheduler:Next wakeup is due at 2018-11-11 18:33:42.956582-05:00 (in 10.000000 seconds)


Код, который я использую для задания заданий и запуска APScheduler.

import atexit
from apscheduler.schedulers.background import BackgroundScheduler

class Notifier(object):

    class NotificationClient(object):

        def __init__(self, gather, timestamp):
            self.gather = gather
            self.timestamp = timestamp

        def run(self):
            self.timestamp = self.gather(self.timestamp)

    def __init__(self):
        self._logger = logging.getLogger(__name__)
        self.notifiers = []

        # Add the jobs here
        self.notifiers.append(self.NotificationClient(self.checkEmails, None))

        # Start the scheduler
        sched = BackgroundScheduler(timezone="America/New_York", daemon=True)
        sched.start()
        sched.add_job(self.gather, 'interval', seconds=30)

        # Shuts down the scheduler when the main program exits
        atexit.register(lambda: sched.shutdown(wait=False))

    def gather(self):
        # client.run() comes from the NotificationClient() class above
        [client.run() for client in self.notifiers]

    #####
    # The function listed in self.notifiers.append()
    def checkEmails(self, lastRun):

        ...code that counts unread emails...

        return lastRun

# Start APScheduler
notifier = Notifier()
...