Может ли задача перепланировать себя с помощью APScheduler? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь настроить задачу с отложенной задачей, время которой будет зависеть от нескольких параметров (переданных ей или полученных из базы данных redis).

псевдокод будет выглядеть так:

def main():
    scheduler = BackgroundScheduler()
    scheduler.add_job(delayed_task, 
                      id=task_id,
                      next_run_time=somedate,
                      args=(task_id, some_data))
    scheduler.start()
    do_something_else()


def delayed_task(id, passed_data):
    rd = connect_to_redis()
    redis_data = rd.fetch_data(id)
    publish_data(passed_data, redis_data)

    updated_run_time = parse(redis_data)
    #obtain a scheduler object here
    scheduler.modify_job(id, next_run_time=updated_run_time)

Вопрос в следующем: есть ли способ получить доступ к планировщику из задачи? Планировщик не может быть передан в качестве параметра для задачи, так как это вызовет

TypeError: can't pickle _thread.lock objects

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

Можно ли восстановить экземпляр планировщика извне, как если бы я мог создать новое соединение с Redis?

...