Этот ответ относится к пакету schedule .
Согласно документации API , правильным API для вызова является schedule.next_run()
* 1009.* method:
schedule. next_run ()
Вызовы next_run в экземпляре планировщика по умолчанию .
Согласно документам, next_run
- это свойство (<property object at 0x044FE7E0>
), которое предположительно хранит объект datetime при запуске следующего задания.Но вам нужно будет получить к нему доступ из Scheduler
экземпляра объекта , который выполняет вашу работу.То, что вы сделали, это доступ к нему из самого Scheduler
класса .
Вместо отслеживания экземпляра Scheduler
, просто используйте доступный API:
schedule.every(1).minutes.do(Job)
while True:
schedule.run_pending()
time.sleep(1)
time_of_next_run = schedule.next_run()
print(type(time_of_next_run)) # <class 'datetime.datetime'>
print(time_of_next_run) # 2019-09-22 13:48:06.566073
Теперь, чтобы узнать оставшееся время, вам просто нужно узнать разницу между датой / временем сейчас и датой / временем, когда будет запущено следующее задание.Модуль Python datetime
поддерживает простое вычитание и возвращает объект timedelta
:
while True:
schedule.run_pending()
time.sleep(1)
time_of_next_run = schedule.next_run()
time_now = datetime.now()
time_remaining = time_of_next_run - time_now
print(time_remaining)
, который будет печатать что-то вроде:
0:00:58.994702
0:00:57.994054
0:00:56.989839
0:00:55.987161
0:00:54.982645
0:00:53.980167
...
Посмотрите на datetime
и timedelta
, чтобы узнать больше вариантов форматирования.
print(f"{time_remaining.seconds} seconds left..") # 58 seconds left..