APScheduler внутри объекта Class

Я пытаюсь внести свой вклад в проект Python на Github для сбора данных из FXCM, и у меня возникли некоторые проблемы с APScheduler внутри класса.

Ниже приведен фрагмент кода.

# director.py

from apscheduler.scheduler import Scheduler

class Director(object):
    """
    Description
    """


class TimeKeeper(Director):
    """
    Description
    """
    def __init__(self):
        sched = Scheduler()


    def min_1(self):
        td = 300
        tf = 'm1'
        print("TimeDelta: %s --- Time Frame: %s --- Event: 'GetLive' sent to queue") % (td, tf)


    # other functions at different times

    def start_timers(self):
        self.sched.start()
        self.sched.add_cron_job(self.min_1, minute='0-59')

Класс начинается с другого скрипта ниже:

# main.py
from director import TimeKeeper

if __name__ == "__main__":
    """
    Description
    """
    TimeKeeper().start_timers()

Проблема в том, что после выполнения скрипта он выполняется в течение доли секунды, а затем останавливается, ошибок трассировки нет.

Класс разработан неправильно или я пропускаю некоторые части кода? Помощь сообществ будет высоко ценится!

1 ответ

Решение

Формальный ответ на ваш вопрос заключается в том, что при использовании APScheduler v2 планировщик по умолчанию работает в многопоточном режиме, который будет возвращен сразу после применения .start():

https://github.com/agronholm/apscheduler/blob/2.1/apscheduler/scheduler.py

Поскольку он возвращается немедленно и ничто не поддерживает основной поток вашей программы, ваша программа завершается немедленно. Вы должны поддерживать свое программирование достаточно долго, чтобы планировщик мог инициировать событие, или вам нужно запускать с использованием блокирующей версии планировщика.

Для этой более старой версии APscheduler вам нужно работать в автономном режиме, если вы хотите, чтобы планировщик блокировал:

https://github.com/agronholm/apscheduler/blob/2.1/examples/interval.py

или вы, если хотите продолжить работу в многопоточном режиме:

https://github.com/agronholm/apscheduler/blob/2.1/examples/threaded.py

Более новые версии APScheduler имеют отдельные BlockingScheduler andКлассы BackgroundScheduler`а и вам следует ознакомиться с соответствующими примерами для обновленного API.

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