Zrozumienie klasy Timer Pythona z przykładami

Python ma tysiące modułów i bibliotek, aby zaspokoić wymagania kodera. Jednak, aby uczynić je użytecznymi, musisz je najpierw zrozumieć,a następnie zastosować. Bez uprzedniej wiedzy o niektórych modułach, nie jest pewne, co chcesz zrobić i co moduł faktycznie robi. Czas jest jednym z ważnych czynników w problemach kodowania. Wszystkie kody mają na celu ograniczenie ludzkiej pracy za pomocą ich potężnych algorytmów. Zarządzanie czasem ma duży wpływ na analizę wydajności Twojego kodu. Dlatego dzisiaj dowiemy się dogłębnie o tym, jak timer działa w Pythonie.

Python Timer jest klasą/biblioteką do zarządzania złożonością czasową kodu. Korzystając z wielu modułów czasowych, możesz utworzyć system w kodzie, aby sprawdzić czas potrzebny na dany fragment kodu. Istnieją różne typy implementacji timera w Pythonie w zależności od potrzeb użytkownika, a mianowicie funkcja timera Pythona (do sprawdzania czasu wykonania skryptu), timer wątków Pythona (do sprawdzania czasu potrzebnego do zakończenia wątku), timer odliczający Pythona (Utwórz timer odliczający) i podstawowy moduł czasu Pythona (aby pomóc w innych działaniach).

wszystkie te funkcje implementacji timera działają inaczej i koncentrują się na zapewnieniu innego zastosowania użytkownikowi końcowemu. W tym poście omówimy szczegółowo każdą implementację timera. Możesz użyć spisu treści, aby przejść do odpowiedniej implementacji timera Pythona.

Katalog

podstawowe funkcje timera w Pythonie

najważniejszym modułem w Pythonie dotyczącym czasu jest czas. Moduł ten zawiera wszystkie podstawowe funkcje do sprawdzania czasu i analizowania go. Ta analiza pomoże Ci zrozumieć wydajność Twojego kodu i jego wydajność. Przejrzymy każdą z ważnych funkcji tego modułu wraz z jego przykładami.

poniżej znajdują się podstawowe funkcje timera Pythona wykorzystujące moduł czasu–

  • czas.time()
  • time.thread_time ()
  • czas.process_time ()
  • czas.perf_counter ()
  • czas.monotoniczny()

czas pracy.time

time.time() zwraca czas w sekundach (float) po epoce. Ogólnie rzecz biorąc, Epoka jest ustawiona na Styczeń 1, 1970, 00:00:00 (UTC) oraz zwracana jest liczba sekund po tej epoce. Ta funkcja zależy od czasu komputera do obliczenia liczby sekund. Jeśli zmienisz czas komputera pomiędzy wykonaniem Pythona, możesz uzyskać dziwne liczby za pomocą tej funkcji.

przykład–

import timestart = time.time() #start timefor i in range(1000000): passend = time.time()print("Elapsed time is {}".format(end-start))

Wyjaśnienie –

po pierwsze, zaczynamy od zaimportowania modułu czasu. Ten moduł zawiera wszystkie podstawowe funkcje czasowe, których będziemy używać w tej sekcji. Na początku kodu zadeklarujemy zmienną start jako time.time(). To zapisze bieżący czas CPU w liczbie float z epoki. Użyjemy tej zmiennej startowej jako punktu odniesienia do pomiaru czasu. Następna część zawiera wszystkie kody, których chcesz użyć (w tym przykładzie użyliśmy pętli for). Podobnie, Zapisz Czas zakończenia PROCESORA (czas domyślny) i sprawdź całkowity czas wykonania za pomocą end-start.

spowoduje to wydrukowanie czasu zajętego przez KOD w sekundach. Za pomocą tej techniki możesz sprawdzić czas potrzebny na kod. Jedynym problemem z tą metodą jest to, że czas procesora można zmienić podczas działania kodu. Spowoduje to problematyczne zachowanie w Python timer.

czas działania.Thread_time

time.thread_time() Zwraca sumę czasu systemu i procesora (float) w bieżącym uruchomionym wątku. Co więcej, nie obejmuje czasu spędzanego w funkcji time.sleep(). Ponieważ funkcja jest specyficzna dla wątku, możesz użyć tej funkcji do rejestrowania różnic czasowych, o ile odniesienia do czasu należą do tego samego wątku.

przykład–

import timeimport threadingend = Nonestart = Nonedef hello(): global start, end start = time.thread_time() x = 0 while x < 10000000: pass x += 1 end = time.thread_time()t = threading.Thread(target = hello, args = ())t.start() t.join()print("The time spent is {}".format(end - start))

Explanation –

ponieważ thread_time zwraca czas specyficzny dla wątku, musimy upewnić się, że używamy referencji w tym samym wątku. W tym celu utworzyliśmy instancję wątku funkcji 'hello’ I obliczyliśmy czas potrzebny wątkowi wewnątrz niego. Upewnij się jednak, że nie możesz uzyskać bieżącego czasu, wywołując thread_time (), ponieważ zwraca wartość ułamkową. Ale zdecydowanie możesz sprawdzić różnicę między dwoma kolejnymi referencjami, o ile należą one do tego samego wątku.

czas działania.Process_time

time.process_time() zwraca odniesienie do czasu w ułamkowych sekundach (float) sumy czasu systemowego i czasu procesora bieżącego postępu. Tak samo jak thread_time, ta funkcja nie mierzy czasu spędzonego w funkcji time.sleep(). Ponadto funkcja ta tworzy odniesienie oparte na procesie. W rezultacie tylko różnica czasu między dwoma kolejnymi referencjami będzie miała sens.

przykład–

from time import process_time, sleepiterations = 100000start = process_time() for i in range(iterations): print(i, end=" ") # Stop the stopwatch / counter end = process_time()print(end, start)print("Elapsed time in seconds:", end-start)

Explanation –

zaczynamy od zaimportowania funkcji process_time i zapisujemy czas rozpoczęcia i zakończenia pomiędzy kodem. Jedyną różnicą między time.time() i time.proces_time() jest to, że czas przetwarzania rejestruje odwołania do czasu bieżącego procesu, podczas gdy time() rejestruje czas absolutny systemu.

czas działania.Perf_counter

Licznik Perf oznacza licznik wydajności. Funkcja ta zwraca wartość czasu o wysokiej rozdzielczości, która jest ważna przez krótki okres czasu. Ta funkcja służy do uzyskania dokładnej liczby czasu między dwoma referencjami. Ponieważ inne funkcje timera Pythona nie zawierają czasu uśpienia, perf_counter również go nie zawiera. Przejdźmy do przykładu –

przykład–

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

Explanation –

możesz użyć licznika perf w taki sam sposób jak timer procesu lub timer wątku. Jedyną różnicą jest to, że perf counter zwróci wysoką dokładną wartość czasu, który upłynął. Ale upewnij się, że używasz tego między małymi procesami, ponieważ wykorzystuje wysoką precyzję. Użyliśmy prostej pętli, aby sprawdzić czas, jaki zajmuje.

czas działania.monotoniczny

monotoniczny to timer Pythona, który nie może cofnąć się do tyłu. Podczas wykonywania skryptu Pythona, czas może być zmieniony przez użytkownika i może mieć ogromną różnicę w implementacji timera w Pythonie. Ale monotoniczny timer zapewnia, że odniesienia czasowe dostosowują się do zmian zewnętrznych.

przykład–

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

Wyjaśnienie –

najpierw importujemy funkcję monotoniczną z modułu czasu. Następnie utwórz dwa referencje o nazwie start i end w górnej i dolnej części kodu. Będzie to mierzyć czas między dwoma odniesieniami i uniknąć wszystkich zewnętrznych zmian czasu systemowego.

niestandardowe klasy timera Pythona

możesz utworzyć własną niestandardową klasę timera, aby robić rzeczy zgodnie z własnymi potrzebami. Jedną z głównych zalet tworzenia niestandardowej klasy jest możliwość zarządzania przez cały czas w jednej linii. Nie musisz za każdym razem importować klasy time i zapisywać referencji. Co więcej, możesz zrzucić swoje dane i nagrać wszystkie poprzednie egzekucje, aby wybrać najlepszy dla siebie algorytm.

Ta sekcja utworzy niestandardową klasę do zarządzania czasem i rejestrowania wszystkich różnic czasowych w kodach. Zagłębimy się w to –

Timer.py–

zaczniemy od zaimportowania modułu czasu. Następnie zainicjuj klasę Timer Pythona i zacznij definiować atrybuty i metody. Do tej pory uwzględniliśmy tylko podstawowy atrybut, aby zachować początkową referencję klasy. Aby uczynić go bardziej złożonym, można utworzyć wiele atrybutów. Do tej pory istnieją trzy metody wymienione poniżej–

  1. start – (Opcjonalnie) do uruchomienia timera.
  2. log-zapisuje bieżący czas, który upłynął w odniesieniu do czasu rozpoczęcia.
  3. milestone-aby zresetować timer i rozpocząć jego licznik od 0.

import timeclass Timer: def __init__(self): self.start = time.time() def start(self): self.start = time.time() def log(self): logger = time.time() - self.start print('Time log -',logger) def milestone(self): self.start = time.time()

example.py –

przykłady użycia powyższej klasy podane są poniżej. Jak widać, możesz zachować czystość kodu, tworząc niestandardową klasę timera i zwiększając elastyczność.

import timertime = timer.Timer()for i in range(1000000):passp = 1time.log()for i in range(1000000):passp = 1time.log()

wyjście–

Time log - 0.054854631423950195Time log - 0.10871052742004395

Python Timer using Threading

kiedy chcemy wykonać jakąś operację LUB chcemy, aby nasza funkcja działała po pewnym czasie, używamy klasy Python Timer. Klasa timer jest podklasą klasy threading. Technicznie można powiedzieć, że tworzymy Obiekty Timer, gdy chcemy, aby akcje (funkcje) były ograniczone czasem.

Załóżmy na przykład, że chcemy zorganizować quiz, w którym uczestnik musi odpowiedzieć na każde pytanie w ciągu 10 sekund. Tutaj możemy stworzyć timer, który będzie działał w tle, a tymczasem uczestnik będzie myślał o odpowiedzi. Teraz, pozwól nam zrozumieć, jak utworzyć obiekt timer.

składnia klasy Timer w Pythonie

jeśli nie rozumiesz, co robi Klasa Timer, możesz pomyśleć o tym w ten sposób – Klasa Timer wywołuje funkcję po określonej liczbie sekund.

aby uruchomić timer, musimy wywołać start()(tak jak normalne wątki), a aby zatrzymać timer, gdy jest jeszcze w tle, możemy wywołać cancel().

aby użyć klasy Timer, musimy zaimportować klasę threading

threading.Timer (interval, function, args=None, kwargs=None)

parametry-

Interval– czas (w sekundach), jaki chcesz odczekać przed wywołaniem następnej funkcji. Może być zmiennoprzecinkowa lub całkowita. Na przykład dla 3 sekund interwał=3.

funkcja-funkcja, którą chcesz wywołać po określonym przedziale czasu.

wszechobecnym sposobem opisywania parametrów *args i **kwargs jest – Utwórz obiekt timer, który uruchamia funkcję z argumentami’ args’ i argumentami kluczowymi’ kwargs’ po upływie interwału sekund. Args powinien być w formie listy I0 słów kluczowych args lub kwargs w formie słownika.

Typ zwracania-

po prostu wywołuje funkcję określoną w parametrach.

metody w klasie Timer

  1. start() – oznacza początek wykonania timera.
  2. Cancel () – podczas wykonywania timera możemy wywołać cancel, jeśli chcemy go zatrzymać ().

Tworzenie obiektu timera

a. Zrozumienie podstaw

aby zrozumieć działanie obiektu timera, stwórzmy mały program, który pomoże nam zrozumieć podstawy klasy.

# Importing the Timer subclass from the threading Classfrom 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 function="hello" after 5 secondst = Timer(interval=5.0, function=hello)# starting the executiont.start() # after 30 seconds, "hello, world" will be printed
Output-hello, world
Python timer

lepiej zrozumiesz działanie powyższego programu, gdy spróbujesz uruchomić go na własnym systemie.

B. korzystając z metody cancel

zobaczmy jak używać funkcji cancel() klasy Timer.

# Importing the Timer subclass from the threading Classfrom 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 function="hello" after 5 secondst = Timer(interval=5.0, function=hello) # starting the executiont.start() # after 30 seconds, "hello, world" will be printedprint("Execution begins")# cancelling the execution of the 'hello' functiont.cancel()print("END")
Execution begins END

c. Jak użyć parametru 'args’ klasy timer Pythona

kiedy musimy podać argumenty funkcji, która ma zostać wywołana, używamy parametru args. Musimy podać argument args w tablicy.

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 t = threading.Timer(3, print_name,)# start the executiont.start()print("Execution begins...")
Execution begins...Hello AshwiniHello VandyHello Arijit

teraz, gdy dużo rozmawialiśmy o czasie, jako bonus, stwórzmy program, który będzie działał jak odliczanie czasu.

odliczanie czasu w Pythonie

Korzystanie z modułu czasu

# We will use the time moduleimport time# Create a function that will print the timedef create_countdown_timer(time): print(time,"......")time_in_sec=int(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:77 ......6 ......5 ......4 ......3 ......2 ......1 ......Time is up

Korzystanie z klasy timer python

# We will use the time moduleimport timefrom threading import Timer# Create a function that will print the timedef create_countdown_timer(time): print(time,"......")# Here you have to enter the time for which the timer will runtime_in_sec=int(input("Please enter the time in seconds:"))# For the first time we will call the function manuallycreate_countdown_timer(time_in_sec) for times in range(1,time_in_sec): # calling the Timer class every second t = Timer(1,create_countdown_timer,) t.start() time.sleep(1) print("\n Time is up") 

Please entert the time in seconds:1010 ......9 ......8 ......7 ......6 ......5 ......4 ......3 ......2 ......1 ......Time is up

timery Pythona jako Menedżery kontekstu

Menedżery kontekstu są najlepszym sposobem na uniknięcie błędów pamięci i późniejszych awarii. Wszyscy musieli wiedzieć o instrukcji „with” w Pythonie. To stwierdzenie zapewnia, że nie musimy dbać o wiele obiektów, aby zamknąć niezależnie. Każdy mógł go używać z kombinacją funkcji with I open (). Przechodząc do głównego pytania, Czy możemy stworzyć Menedżery kontekstu dla timerów Pythona?

tak. Ze względu na wiele funkcji przeciążania, możemy łatwo utworzyć własny timer Pythona jako menedżer kontekstu w zaledwie kilku wierszach. Zacznijmy od przykładu, w którym musisz zmierzyć czas uruchomienia programu. Bez redefiniowania wszystkich zmiennych, jeden menedżer kontekstu może być używany wielokrotnie do wielokrotnego pomiaru czasu. Poniższy program to demonstruje.

przykład–

import timeclass Timer_Pythonpool(): """ Context manager as a python timer """ def __init__(self): self.start = None def __enter__(self): """ Notes the time at the start of the iteration """ self.start = time.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): x = 0 pass

wyjście–

Time to finish the task: 0.05392050743103027

Wyjaśnienie –

zaczynamy od utworzenia klasy o nazwie „Timer_Pythonpool.”Następnie dostosowujemy operatorów, aby byli użyteczni jako menedżer kontekstu. _funkcja_ enter_ _ wykonuje się na początku kontekstu, a _ _ exit _ _ wykonuje się na końcu kontekstu. Utworzenie punktu odniesienia między tymi dwiema funkcjami może dać dokładny czas potrzebny kontekstowi do wykonania.

dekoratory Python Timer

dekoratory są dodatkowym wsparciem dla każdego rodzaju funkcji. Określany również jako metaprogramowanie, można modyfikować / dodawać do niego funkcjonalność. Dekoratory timera w Pythonie są najprostszym sposobem na zaimplementowanie funkcji timera w Pythonie. Po zadeklarowaniu możesz użyć dekoratorów w jednej linii, nawet ich nie znając. Dodając do tego, możesz zastosować je do każdej funkcji w kodzie, aby sprawdzić, który Kod zajmuje najwięcej czasu.

składnia –

aby utworzyć dekorator łańcuchów, musisz zadeklarować wiele zagnieżdżonych funkcji. Nazwij drugą funkcję jako główną nazwę dekoratora i wewnętrzną dowolną losową nazwę. Wewnętrzna funkcja pobierze odniesienie do funkcji użytej poniżej dekoratora.

przykład–

import timedef check_time(func): def inner(*args, **kwargs): start = time.time() func(*args, **kwargs) end = time.time() print("Time taken to execute function is ", end-start) return inner@check_timedef task(): # do something for i in range(10000000): x = 0 passtask()

wyjście–

Time taken to execute function is 0.24933218955993652

Wyjaśnienie –

jak zwykle zaczynamy od zaimportowania najważniejszego modułu z Pythona „time”.”Następnie tworzymy dekoratora o nazwie „check_time.”Wewnątrz niej dodajemy zagnieżdżoną funkcję wewnętrzną, w której możemy tworzyć odniesienia czasu. Te dwa referencje są umieszczone tak, że oba z nich są umieszczone między wykonaniem funkcji.

ponadto tworzymy funkcję testową o nazwie „zadanie”, aby sprawdzić, czy nasze zadanie działa. Następnie dodaj dekorator na nim. Teraz dekorator wykona swoją magię i wydrukuje czas potrzebny na funkcję.

Czas Odnowienia timera w Pythonie

Czas Odnowienia timera w Pythonie jest sposobem pomiaru czasu do tyłu. Tworząc niestandardową klasę timera, możemy rejestrować czas w każdym punkcie kodu. Możesz wyeksportować tę klasę jako moduł i zainstalować ją jako zależność w swoim kodzie. Następnie, używając jednej linii, możesz ją zaimportować–

import timeclass Timer: """ Timer class """ def __init__(self): self.start = time.time() ''' Restarts the timer. ''' def restart(self): self.start = time.time() ''' Returns the time elapsed and resets the counter. ''' def get_new_time(self): value = time.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): end = time.time() m, s = divmod(end - self.start, 60) h, m = divmod(m, 60) time_str = "%02d:%02d:%02d" % (h, m, s) return time_strtimer = Timer() #Initialize the timer#wash clothes for 5 secondstimer.print_time() #Print the time elapsed since Initialization (in seconds)#dry clothes for 3 secondstimer.print_new_time() #Print the time elapsed since Initialization and reset the timer#burn clothes for 10 secondsprint(str('Task done for ' + str(timer.get_time()) + ' seconds.'))

inne moduły timera Pythona

Python zawiera tysiące modułów i miliony fragmentów kodu. Zawsze możemy użyć modułów open-source do używania timerów Pythona. Github jest największym miejscem na znalezienie takich modułów. Przejdźmy od razu do tych modułów–

  1. termdown: zaawansowany timer Pythona wykonany przy użyciu różnych znaków ASCII. Za pomocą tego skryptu można utworzyć prosty licznik czasu w terminalu i wykonać polecenie na końcu. Co najważniejsze, ma wsparcie dla odliczania głosu.
  2. MobTimer.Python: oparty na GUI timer stworzony w Pythonie. Ten skrypt tworzy pełnoekranowe timery z wieloma opcjami. Wraz z nim, można uruchomić wiele timerów na ekranie w tym samym czasie za pomocą tego programu.
  3. timer: jest to najbardziej podstawowy timer oparty na GUI wykonany w Pythonie (Tkinter). Funkcje takie jak wiele timerów, etykiet i wielowątkowości sprawiają, że jest to bardziej opłacalne w porównaniu z innymi programami.
  4. kodowanie: ta klasa timera rejestruje wszystkie Twoje poprzednie czasy wykonania dla określonego procesu nazwanego. Możesz sprawdzić minimalny czas, maksymalny czas, czas międzyczasie i medianę czasu dla określonego procesu wraz z rekordami. Moduł ten może być używany na wiele sposobów, a mianowicie jako menedżer kontekstu i jako dekorator.
  5. cTimer: CTime jest timerem o precyzji nanosekundowej w Pythonie. Moduł ten wykorzystuje API języka c do precyzyjnego zapisu czasu. Jeśli szukasz hardcore precyzyjnych modułów nagrywania czasu,jest to najlepszy. (Uwaga: w ostatnich aktualizacjach Pythona, moduł czasu jest dodawany z funkcjami do rejestrowania czasu w nanosekundach)

musi przeczytać:

  • Jak przekonwertować ciąg znaków na małe litery w
  • Jak obliczyć pierwiastek kwadratowy
  • wejście użytkownika | funkcja Input () | wejście klawiatury
  • najlepsza książka do nauki Pythona

wnioski

przeważnie każdy używa timerów do trzech celów. Pierwszym z nich jest zapisanie czasu wykonania kodu. A po drugie, aby dodać przypomnienie o czymś za pomocą timera. Na szczęście oba mogą być tworzone w Pythonie. Korzystając z różnych modułów i bibliotek, możesz mieć pewność, że rejestrujesz czas z najwyższą dokładnością.

wreszcie, timer jest podklasą klasy wątków w Pythonie. Jeśli chcemy uruchomić dowolną funkcję po określonym przedziale czasu, możemy użyć klasy python timer. W parametrze args, który domyślnie jest None, możemy określić argumenty, które chcemy przekazać metodzie callback.

spróbuj uruchomić programy po swojej stronie i daj nam znać, jeśli masz jakieś pytania.

You might also like

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.