Перечитывания конфигурации для модуля schedule в python

Есть телеграм бот, который умеет рассылать по расписанию сообщения пользователям. Само расписание сейчас создается из ini файла.

[AtTimeScheduler]
#Send by clock.
fisrt_group = 19:00
second_group = 19:15

[Subscribers]
fisrt_group = [*tg_id*,]
second_group = [*tg_id*,]

Есть отдельный класс для работы с конфигурацией и методы для работы с расписанием в BotConfig.py:

class Config:
    TelebotConfig = configparser.ConfigParser()
    TelebotConfig.read(os.path.join(os.path.dirname(__file__), 'Telebot.cfg'))

def bot_timer():
    while True:
        schedule.run_pending()
        time.sleep(1)

def bot_scheduler(botInstance):
    for i in Config.SZPVTelebotConfig['AtTimeScheduler']:
        schedule.every().day.at(Config.TelebotConfig['AtTimeScheduler'][i]).do(
            botInstance.send_statistic_by_schedule, i, Config.TelebotConfig['Subscribers'][i])

И из main.py он запускается так:

import BotWorker.bot as botInstance #тут инстанс для работы с ботом и его методы

Thread(target=BotConfig.TelebotConfig.bot_timer).start()
BotConfig.TelebotConfig.bot_scheduler(botInstance)

Получается, что создается поток с таймером, который тикает. Schedule ищет нужное событие(по времени) и в нём выполняет метод. Но теперь я хочу добавить интерактивную возможность настраивать расписание. Суть будет такая же. Пользователь в телеграме выполняет инструкции, в бд поподает/обновляется запись. По ключу можно я могу получить группы, а по группам всех подписчиков и расписание. Сравнить с текущем(при запуске).

Но как сделать, чтобы при добавлении новых записей в бд он добавлял это в текущее расписание? Я могу, наверное, написать вариант с тем, что если кортеж старых записей отличается от новых, я полностью убиваю расписание и запускаю его заново. И поставить на обновление каждую минуту. Но, мне кажется это плохой вариант. И гуру подскажут как лучше. И что будет с теми процессами по расписанию, которые выполняются вот прям сейчас. Он ведь тоже умрут.

Понятно, что у меня будет отдельный поток, который сможет извлекать данные из бд. И если при отличии данных от текущих - он будет...что? Я понимаю, что теперь придётся каждое расписание запускать в отдельном потоке, видимо. Или добавлять в существующий schedule. Но как тогда отличать уже запущенные расписания от новых? Так, чтобы он понимал, что fisrt_group = 19:00 c fisrt_group = [*tg_id*,] Уже в работе. Я совершенно не представляю как это реализовать, даже намеков нет.


Ответы (0 шт):