Рубрики
Без рубрики

Понимание класса таймера Python с примерами

Если мы хотим задержать выполнение функции на определенное время, мы можем использовать класс python timer. start() и cancel () – это два его метода.

Автор оригинала: Team Python Pool.

Понимание класса таймера Python с примерами

Python имеет тысячи модулей и библиотек для удовлетворения потребностей программиста. Однако, чтобы сделать их полезными, вы должны сначала понять их, а затем применить. Без предварительного знания определенных модулей неясно, что вы хотите сделать и что на самом деле делает модуль. Время-один из важных факторов в задачах кодирования. Все коды предназначены для того, чтобы уменьшить работу человека, используя свои мощные алгоритмы. Тайм-менеджмент оказывает большое влияние на анализ производительности вашего кода. Вот почему сегодня мы подробно узнаем о том, как работает таймер в Python.

Python Timer-это класс/библиотека для управления временной сложностью вашего кода. Используя несколько временных модулей, вы можете создать систему в своем коде, чтобы проверить время, затраченное соответствующим фрагментом кода. Существуют различные типы реализаций таймера в python в соответствии с потребностями пользователя, а именно функция таймера python (для проверки времени выполнения скрипта), таймер потоковой передачи python (для проверки времени, затраченного потоком на завершение), таймер обратного отсчета python (создание таймера обратного отсчета) и базовый модуль времени python (для помощи в других действиях).

Все эти реализации таймера функционируют по-разному и фокусируются на предоставлении различного использования конечному пользователю. В этом посте мы подробно рассмотрим каждую реализацию таймера. Вы можете использовать Оглавление, чтобы перейти к соответствующей реализации таймера python.

Основные Функции Таймера Python

Самый важный модуль в python относительно времени-это href=”https://docs.python.org/3/library/time.html”>время. Этот модуль содержит все основные функции для проверки времени и его анализа. Этот анализ поможет вам понять производительность вашего кода и его эффективность. Мы рассмотрим каждую из важных функций этого модуля вместе с примерами. href=”https://docs.python.org/3/library/time.html”>время. Этот модуль содержит все основные функции для проверки времени и его анализа. Этот анализ поможет вам понять производительность вашего кода и его эффективность. Мы рассмотрим каждую из важных функций этого модуля вместе с примерами.

Ниже приведены основные функции таймера Python, использующие модуль time –

  • time.time()
  • time.thread_time()
  • time.process_time()
  • time.perf_counter()
  • time.monotonic()

Функция time.time

time.time() возвращает время в секундах (float) после эпохи. Как правило, эпоха устанавливается на январь 1, 1970, 00:00:00 (UTC), и возвращается количество секунд после этой эпохи. Эта функция зависит от времени компьютера для вычисления количества секунд. Если вы измените компьютерное время между выполнением python, вы можете получить странные числа, используя эту функцию.

Пример –

import time
.time() #start time

for i in range(1000000):
    pass
.time()
print("Elapsed time is  {}".format(end-start))

Объяснение –

Во-первых, мы начинаем с импорта модуля времени. Этот модуль содержит все основные функции времени, которые мы будем использовать в этом разделе. В начале кода мы объявим переменную start как time.time(). Это сохранит текущее время процессора в float number из эпохи. Мы будем использовать эту начальную переменную в качестве ориентира для измерения времени. Следующая часть содержит все коды, которые вы хотите использовать (В этом примере мы использовали циклы for).Аналогично, запишите время окончания работы процессора (время по умолчанию) и проверьте общее время выполнения с помощью end – start.

Это выведет время, затраченное кодом в секундах. С помощью этой техники вы можете проверить время, затраченное вашим кодом. Единственная проблема с этим методом заключается в том, что процессорное время может быть изменено во время выполнения кода. Это приведет к проблемному поведению в python timer.

Функциональное время.Thread_time

time.thread_time() возвращает сумму системного и процессорного времени (float) в текущем запущенном потоке. Более того, он не включает в себя время, которое вы проводите в функции time.sleep(). Поскольку функция зависит от потока, вы можете использовать эту функцию для записи временных различий до тех пор, пока ссылки на время принадлежат одному и тому же потоку.

Пример –

import time
import threading
def hello():
    global start, end
   .thread_time()
    
    while x < 10000000:
        pass
        x
   .thread_time()
.Thread(target, args = ())
t.start() 
t.join()

print("The time spent is {}".format(end - start))

Объяснение –

Поскольку thread_time возвращает специфичное для потока время, мы должны убедиться, что используем ссылки в том же потоке . Для этого мы создали экземпляр потока функции ‘hello’ и рассчитали время, затраченное потоком внутри него. Однако убедитесь, что вы не можете получить текущее время, вызвав thread_time() , поскольку он возвращает дробное значение.Но вы определенно можете проверить разницу между двумя последовательными ссылками, если они принадлежат одному потоку.

Функциональное время.Process_time

time.process_time() возвращает ссылку на время в дробных секундах (float) суммы системного времени и процессорного времени текущего прогресса. Как и thread_time, эта функция не измеряет время, проведенное в функции time.sleep(). Более того, эта функция создает ссылку на основе процесса. As в результате этого будет иметь смысл только разница во времени между двумя последовательными ссылками.

Пример –

from time import process_time, sleep

()  
   
for i in range(iterations):
    print(i,)
  
# Stop the stopwatch / counter ()
print(end, start)
print("Elapsed time in seconds:", end-start)

Объяснение –

Мы начинаем с импорта функции process_time и записываем время начала и окончания между кодом. Единственное различие между устаревшими time.time() и time.process_time() заключается в том, что processing time записывает временные ссылки текущего процесса, тогда как time() записывает абсолютное время системы.

Время работы.Perf_counter

Perf Counter расшифровывается как Performance Counter. Эта функция возвращает значение с высоким разрешением времени, которое является действительным в течение короткого периода времени. Эта функция используется для получения точного отсчета времени между двумя ссылками. Поскольку другие функции таймера python не включают время сна, perf_counter также не включает его. Давайте перейдем к примеру –

Пример –

from time import perf_counter, sleep
  
# integer input from user, 2 input in single line
  
# Start the stopwatch / counter ()  
  
for i in range(n): 
    sleep(1)
() 
  
  
print("Elapsed time in seconds:", end-start)

Объяснение –

Счетчик perf можно использовать так же, как таймер процесса или таймер потока. Разница лишь в том, что счетчик perf вернет высокое точное значение прошедшего времени. Но убедитесь, что вы используете этот между небольшими процессами, так как он использует высокую точность. Мы использовали простой цикл, чтобы проверить время, затраченное им.

Функция времени.монотонная

Monotonic-это таймер python , который не может идти назад. При выполнении скрипта python время может быть изменено пользователем и может иметь огромное значение при реализации таймера в python. Но монотонный таймер гарантирует, что отсчеты времени приспосабливаются к внешним изменениям.

Пример –

from time import monotonic, sleep
  
# integer input from user, 2 input in single line
  
# Start the stopwatch / counter ()  
  
for i in range(n): 
    sleep(1)
() 
  
  
print("Elapsed time in seconds:", end-start)

Объяснение –

Сначала мы импортируем монотонную функцию из модуля времени. Затем создайте две ссылки с именами start и end в верхней и нижней части кода. Это позволит измерить время между двумя ссылками и избежать всех внешних изменений системного времени.

Пользовательские Классы таймера Python

Вы можете создать свой собственный класс таймера, чтобы делать все в соответствии с вашими потребностями. Одним из главных преимуществ создания пользовательского класса является то, что вы можете управлять всем временем в одной строке. Вам не нужно каждый раз импортировать класс time и записывать ссылки. Кроме того, вы можете сбросить свои данные и записать все прошлые исполнения времени, чтобы выбрать лучший алгоритм для вас.

В этом разделе будет создан пользовательский класс для управления временем и регистрации всех временных различий в ваших кодах. Давайте нырнем прямо в него –

<сильный>Timer.py –

Начнем с импорта модуля времени. Затем инициализируйте класс таймера python и начните определять атрибуты и методы. До сих пор мы включали только базовый атрибут, чтобы сохранить начальную ссылку класса. Чтобы сделать его более сложным, вы можете создать несколько атрибутов. На данный момент существует три метода, перечисленных ниже –

  1. start – (Необязательно) Чтобы запустить таймер.
  2. log – Регистрировать текущее прошедшее время относительно времени начала.
  3. milestone – Сбросить таймер и начать его отсчет с 0.
import time

class Timer:

    def __init__(self):
       .time()

    def start(self):
       .time()

    def log(self):
       .time() - self.start
        print('Time log -',logger)

    def milestone(self):
       .time()

<сильный>example.py –

Примеры использования вышеуказанного класса приведены ниже. Как вы можете видеть, вы можете сохранить свой код чистым, создав пользовательский класс таймера и повысив гибкость.

import timer
.Timer()
for i in range(1000000):
	pass

time.log()
for i in range(1000000):
	pass

time.log()

Выход –

Time log - 0.054854631423950195
Time log - 0.10871052742004395

Таймер Python с использованием потоковой передачи

Когда мы хотим выполнить какую-то операцию или хотим, чтобы наша функция выполнялась через определенное время, мы используем класс Python Timer. Класс timer является подклассом класса threading. Технически можно сказать, что мы создаем объекты таймера, когда хотим, чтобы действия (функции) были ограничены временем.

Например, предположим, что мы хотим организовать викторину, где участник должен ответить на каждый вопрос за 10 секунд. Здесь мы можем создать таймер, который будет работать в фоновом режиме, а тем временем участник будет думать над ответом. Теперь давайте разберемся, как создать объект timer .

Синтаксис класса Timer в Python

Если вы не поняли, что делает класс Timer, вы можете думать об этом следующим образом – Класс Timer вызывает функцию через заданное количество секунд.

Чтобы запустить таймер, нам нужно вызвать start()(как и обычные потоки), а чтобы остановить таймер, пока он все еще находится в фоновом режиме, мы можем вызвать cancel().

Чтобы использовать класс Timer, нам нужно импортировать класс threading

<сильная>резьба.Таймер(интервал, функция,,)

Параметры-

Интервал– Время (в секундах), которое вы хотите подождать перед вызовом следующей функции. Он может быть либо в float, либо в integer. Например, в течение 3 секунд.

Функция – Функция, которую вы хотите вызвать через указанный промежуток времени.

Распространенным способом описания параметров *args и **kwargs является- создание объекта таймера, который запускает функцию с аргументами’ args’ и аргументами ключевых слов’ kwargs’ после того, как прошли интервальные секунды. Args должны быть в виде списка и ключевого слова args или kwargs в виде словаря .

Тип возврата-

Он просто вызывает функцию, указанную в параметрах.

Методы в классе Timer

  1. start() – Это означает начало выполнения таймера.
  2. Cancel ()– Во время выполнения таймера мы можем вызвать функцию cancel, если хотим остановить его ().

Создание объекта таймера

<сильный>а. Понимание основ

Чтобы понять, как работает объект Timer, давайте создадим небольшую программу, которая поможет нам понять основы класса.

# Importing the Timer subclass from the threading Class
from threading import Timer

# creating a basic function that will print "hello"
def hello():
    print ("hello, world")

# creating the object of the Timer subclass
# Here, 5 sec means that the execution of the after 5 seconds(interval=5.0,)

# starting the execution
t.start() # after 30 seconds, "hello, world" will be printed
Output-
hello, world
таймер python
таймер python

Вы лучше поймете функционирование вышеприведенной программы, когда попытаетесь запустить ее самостоятельно href=”https://en.wikipedia.org/wiki/System”>система. href=”https://en.wikipedia.org/wiki/System”>система.

<сильный>б. Использование метода отмены

Давайте посмотрим, как использовать функцию cancel() класса Timer.

# Importing the Timer subclass from the threading Class
from threading import Timer

# creating a basic function that will print "hello"
def hello():
    print ("hello world")
    
# creating the object of the Timer subclass
# Here, 5 sec means that the execution of the after 5 seconds(interval=5.0,)
    
# starting the execution
t.start() # after 30 seconds, "hello, world" will be printed

print("Execution begins")

# cancelling the execution of the 'hello' function
t.cancel()
print("END")
Execution begins 
END

c. Как использовать параметр ‘args’ класса python timer

Когда нам нужно дать аргументы функции, которую нужно вызвать, мы используем параметр args. Мы должны дать аргумент args в массиве.

import threading

# To take multiple inputs we can use *before the parameter.
def print_name(*names):
    # From the array of names pick one name and print it
    for name in names:
        print("Hello",name)

# In the args parameter, give an array of names .Timer(3, print_name,["Ashwini","Vandy","Arijit"])

# start the execution
t.start()
print("Execution begins...")
Execution begins...
Hello Ashwini
Hello Vandy
Hello Arijit

Теперь, когда мы много говорили о времени, в качестве бонуса давайте сделаем программу, которая будет действовать как таймер обратного отсчета.

Таймер обратного отсчета в python

Использование модуля времени

# We will use the time module
import time

# Create a function that will print the time
def create_countdown_timer(time):
    print(time,"......")
(input("Please entert the time in seconds:"))

for times in range(time_in_sec):
    # call the function and pass the current time left
    create_countdown_timer(time_in_sec-times)
    # call the function in every 1 second.
    time.sleep(1)
    
print("Time is up")
Please entert the time in seconds:7
7 ......
6 ......
5 ......
4 ......
3 ......
2 ......
1 ......
Time is up

Использование класса python Timer

# We will use the time module
import time

from threading import Timer

# Create a function that will print the time
def create_countdown_timer(time):
    print(time,"......")

# Here you have to enter the time for which the timer will run(input("Please enter the time in seconds:"))

# For the first time we will call the function manually
create_countdown_timer(time_in_sec) 

for times in range(1,time_in_sec): 
    # calling the Timer class every second
   (1,create_countdown_timer,[str(time_in_sec-times)])
    t.start()
    time.sleep(1)
    
print("\n Time is up")
Please entert the time in seconds:10
10 ......
9 ......
8 ......
7 ......
6 ......
5 ......
4 ......
3 ......
2 ......
1 ......
Time is up

Таймеры Python как контекстные менеджеры

Контекстные менеджеры-это лучший способ избежать ошибок памяти и последующих сбоев. Все должны были знать о “with” заявлении в Python. Это утверждение гарантирует, что нам не нужно заботиться о том, чтобы многие объекты закрывались независимо. Каждый мог бы использовать его с комбинацией функций with и open(). Итак, переходя к главному вопросу, можем ли мы создать контекстные менеджеры для таймеров Python?

<сильный>Да. Благодаря множеству функций перегрузки мы можем легко создать наш собственный таймер python в качестве контекстного менеджера всего за несколько строк. Давайте начнем с примера, где вы должны измерить время выполнения программы. Без переопределения всех переменных один контекстный менеджер может использоваться многократно для многократного измерения времени. Следующая программа демонстрирует это.

Пример –

import time


class Timer_Pythonpool():
    """
        Context manager as a python timer
    """
    def __init__(self): 
       
          
    def __enter__(self):
        """
            Notes the time at the start of the iteration
        """
       .time()
        return self
      
    def __exit__(self, exc_type, exc_value, exc_traceback):
        """
            Prints the time taken at the end of the iteration
        """
        print("Time to finish the task: ", time.time()-self.start)
  
  
with Timer_Pythonpool() as timer: 
    for i in range(1000000):
       
        pass

Выход –

Time to finish the task:  0.05392050743103027

Объяснение –

Мы начинаем с создания класса с именем “Timer_Python pool.” Затем мы настраиваем операторы, чтобы сделать их полезными в качестве контекстного менеджера. __enter__ функция выполняется в начале контекста, а __exit__ выполняется в конце контекста. Создание точки отсчета между этими двумя функциями может дать вам точное время, необходимое контексту для выполнения.

Python Timer Decorators

Декораторы-это дополнительная поддержка для любого вида функций. Также называемый метапрограммированием, вы можете изменить/добавить к нему функциональность. Python Timer Decorators-это самый простой способ реализации функций таймера в python. После объявления вы можете использовать декораторы в одной строке, даже не зная их. Кроме того, вы можете применить их к каждой функции в вашем коде, чтобы проверить, какой код занимает больше всего времени для выполнения.

Синтаксис –

Чтобы создать цепной декоратор, вам нужно объявить несколько вложенных функций. Назовите другую функцию своим основным именем декоратора и внутренним для любого случайного имени. Внутренняя функция извлекает ссылку на функцию, используемую ниже декоратора.

Пример –

import time

def check_time(func):
    def inner(*args, **kwargs):
       .time()
        func(*args, **kwargs)
       .time()
        print("Time taken to execute function is ", end-start)
    return inner


@check_time
def task():
    # do something
    for i in range(10000000):
       
        pass


task()

Выход –

Time taken to execute function is  0.24933218955993652

Объяснение –

Как обычно, мы начинаем с импорта самого важного модуля из python “time.” Затем мы создаем декоратор с именем “check_time.” Внутри него мы добавляем вложенную внутреннюю функцию, где мы можем создавать ссылки на время. Эти две ссылки расположены так, что обе они находятся между выполнением функции.

Далее мы создаем тестовую функцию с именем “задача”, чтобы проверить, работает ли наша задача. Затем добавьте сверху декоратора. Как<сильный> декоратор будет творить свою магию и печатать время, затраченное функцией.

Перезарядка таймера Python

Python Timer Cooldown-это способ измерения таймера в обратном направлении. Создавая пользовательский класс таймера, мы можем регистрировать время в каждой точке вашего кода. Вы можете экспортировать этот класс как модуль и установить его как зависимость в своем коде. Затем, используя одну строку, вы можете импортировать ее –

import time

class Timer:
    """
        Timer class
    """
    def __init__(self):
       .time()

    '''
    Restarts the timer.
    '''
    def restart(self):
       .time()


    '''
    Returns the time elapsed and resets the counter.
    '''
    def get_new_time(self):
       .time() - self.start
        self.restart()
        return value


    '''
    Prints the time elapsed and resets the counter.
    '''
    def print_new_time(self):
        print (self.get_new_time())


    '''
    Returns the time elapsed (Does not reset the counter).
    '''
    def get_time(self):
        return time.time() - self.start
        self.restart()


    '''
    Prints the time elapsed (Does not reset the counter).
    '''
    def print_time(self):
        print(self.get_time())


    '''
    Returns the time elapsed in HH:mm:ss (Does not reset the counter).
    '''
    def get_time_hhmmss(self):
       .time()
        m,(end - self.start, 60)
        h,(m, 60)
        % (h, m, s)
        return time_str

() #Initialize the timer
#wash clothes for 5 seconds
timer.print_time() #Print the time elapsed since Initialization (in seconds)
#dry clothes for 3 seconds
timer.print_new_time() #Print the time elapsed since Initialization and reset the timer
#burn clothes for 10 seconds
print(str('Task done for ' + str(timer.get_time()) + ' seconds.'))

Другие Модули Таймера Python

Python содержит тысячи модулей и миллионы фрагментов кода. Мы всегда можем использовать модули с открытым исходным кодом для использования таймеров python. Github-это самое большое место для поиска таких модулей. Давайте сразу перейдем к этим модулям –

  1. term down: Продвинутый таймер python, созданный с использованием различных символов ASCII. Используя этот скрипт, вы можете создать простой таймер обратного отсчета в вашем терминале и выполнить команду в конце. Самое главное, что он имеет поддержку голосового обратного отсчета.
  2. MobTimer.Python: Таймер на основе графического интерфейса, созданный на python. Этот скрипт создает полноэкранные таймеры с несколькими опциями. Наряду с этим, вы можете запускать несколько раз на вашем экране одновременно с помощью этой программы.
  3. timer: Это самый простой таймер на основе графического интерфейса, созданный на python (Tkinter). Такие функции, как несколько таймеров, меток и многопоточность, делают его более жизнеспособным по сравнению с другими программами.
  4. code timing: Этот класс таймера записывает все ваши прошлые времена выполнения для определенного именованного процесса. Вы можете проверить минимальное время, максимальное время, среднее время и среднее время для конкретного процесса вместе с записями. Этот модуль можно использовать несколькими способами, а именно как контекстный менеджер и как декоратор.
  5. cTimer: crime-это таймер с точностью до наносекунды в python. Этот модуль использует API языка c для точной записи времени. Если вы ищете хардкорные модули точной записи времени, то это самый лучший вариант. (Примечание: В последних обновлениях python модуль time добавлен с функциями записи времени в наносекундах)

Должен Читать:

  • Как преобразовать строку в нижний регистр в
  • Как вычислить Квадратный корень
  • Пользовательский ввод | Функция ввода () | Ввод с клавиатуры
  • Лучшая книга для изучения Python

Вывод

В основном все используют таймеры для трех целей. Первый-это запись времени выполнения вашего кода. А во-вторых, добавить напоминание о чем-то с помощью таймера. К счастью, оба они могут быть созданы в Python. Используя различные модули и библиотеки, вы можете гарантировать, что записываете время с предельной точностью.

И последнее, но не менее важное: таймер – это подкласс класса threading в python. Если мы хотим запустить какую-либо функцию через определенный промежуток времени, мы можем использовать класс python timer. В параметре args, который по умолчанию равен None, мы можем указать аргументы, которые мы хотим передать методу обратного вызова .

Попробуйте запустить программы на вашей стороне и дайте нам знать, если у вас есть какие-либо вопросы.