Я пытаюсь настроить задачу с отложенной задачей, время которой будет зависеть от нескольких параметров (переданных ей или полученных из базы данных 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?