Получение оставшегося времени из таймера python - PullRequest
1 голос
/ 25 мая 2020

Ищем простой способ получения оставшегося и прошедшего времени с таймера python. В настоящее время есть (на основе источника github для threading.Timer и предыдущего сообщения):

import threading
import time

class CountdownTimer(threading.Thread):
    def __init__(self, interval, function, args=None, kwargs=None):
        threading.Thread.__init__(self)
        self.interval = interval
        self.function = function
        self.args = args if args is not None else []
        self.kwargs = kwargs if kwargs is not None else {}
        self.finished = Event()
        self.started_at = None

    def cancel(self):
        self.finished.set()

    def elapsed(self):
        return time.time() - self.started_at

    def remaining(self):
        return self.interval - self.elapsed()

    def run(self):
        self.started_at = time.time()
        self.finished.wait(self.interval)
        if not self.finished.is_set():
            self.function(*self.args, **self.kwargs)
        self.finished.set()

Выглядит ли это достаточно эффективно (не требуется точность, превышающая ту, что в настоящее время обеспечивает threading.Timer)?

1 Ответ

0 голосов
/ 25 мая 2020

perf_counter ()

import time

start = time.perf_counter()
time.sleep(2)
finish = time.perf_counter()
print(f'Finished in {round(finish-start, 2)} second(s)')

Преимущества perf_counter ():

  1. perf_counter() даст вы получите более точное значение, чем функция time.clock().

  2. From Python3 .8 time.clock() функция будет удалена и будет использоваться perf_counter.

  3. Мы можем вычислять значения времени с плавающей запятой и целое число в секундах и наносекундах.

...