Получить оставшееся время для выполнения следующей работы в расписании? - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь распечатать оставшееся время для следующей работы.Вот пример кода:

import schedule
import time

def Job():
    #doing something...

schedule.every(1).minutes.do(Job)

while True:
    schedule.run_pending()
    time.sleep(1)
    print(schedule.Scheduler.next_run) # prints "<property object at 0x044FE7E0>"
    time.sleep(5)

Как мне сделать это правильно?

1 Ответ

0 голосов
/ 22 сентября 2019

Этот ответ относится к пакету 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..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...