Pochopení třídy časovače Pythonu s příklady

Python má tisíce modulů a knihoven, které uspokojí požadavky kodéru. Chcete-li je však učinit užitečnými, musíte je nejprve pochopit a poté je použít. Bez předchozí znalosti určitých modulů není jisté, co chcete dělat a co modul skutečně dělá. Čas je jedním z důležitých faktorů při kódování problémů. Všechny kódy jsou určeny ke snížení lidské práce pomocí jejich výkonných algoritmů. Řízení času vytváří velký dopad na analýzu výkonu vašeho kódu. Proto se dnes podrobně dozvíme, jak časovač funguje v Pythonu.

Python Timer je třída / Knihovna pro správu časové složitosti vašeho kódu. Pomocí více časových modulů můžete v kódu vytvořit systém, který zkontroluje čas potřebný příslušným úryvkem kódu. Existují různé typy časovače implementace v pythonu podle potřeb uživatele, a to, python funkce časovače (check script execution time), python threading časovač (podívejte se na čas potřebný na vlásku až do konce), python odpočítávání (vytvořit odpočítávání časovače) a základní python času modul (na pomoc s dalšími činnostmi).

všechny tyto funkce implementace časovače odlišně a zaměřuje se na poskytování různých použití koncovému uživateli. V tomto příspěvku podrobně projdeme každou implementaci časovače. Pomocí obsahu můžete přejít na příslušnou implementaci časovače Pythonu.

Katalog

Základní Python Funkce Časovače

nejdůležitější modul v pythonu, pokud jde čas, je čas. Tento modul obsahuje všechny základní funkce pro kontrolu času a jeho analýzu. Tato analýza vám pomůže pochopit výkon vašeho kódu a jeho účinnost. Projdeme každou z důležitých funkcí z tohoto modulu spolu s jeho příklady.

Níže jsou uvedeny základní funkce časovače Pythonu pomocí časového modulu–

  • čas.čas ()
  • čas.thread_time ()
  • čas.process_time ()
  • čas.perf_counter ()
  • čas.monotónní()

funkční doba.čas

time.time() vrací čas v sekundách (float) po epoše. Obvykle, epocha je nastavena na leden 1, 1970, 00:00:00 (UTC) a počet sekund po této epoše je vrácen. Tato funkce závisí na čase počítače pro výpočet počtu sekund. Pokud změníte čas počítače mezi spuštěním Pythonu, můžete pomocí této funkce získat podivná čísla.

příklad–

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

vysvětlení –

nejprve začneme importem časového modulu. Tento modul obsahuje všechny základní časové funkce, které budeme používat v této části. Na začátku kódu deklarujeme počáteční proměnnou jako time.time(). Tím se uloží aktuální čas CPU do floatového čísla z epochy. Použijeme tuto počáteční proměnnou jako referenční bod k měření času. Další část obsahuje všechny kódy, které chcete použít (v tomto příkladu jsme použili a pro smyčky). Podobně zaznamenejte čas ukončení CPU (výchozí čas) a zkontrolujte celkovou dobu spuštění pomocí end-start.

tím se vytiskne čas potřebný kódem v sekundách. Pomocí této techniky můžete zkontrolovat čas, který váš kód vyžaduje. Jediným problémem s touto metodou je, že čas CPU může být změněn, když je kód spuštěn. To bude mít za následek problematické chování v python timer.

funkční čas.Thread_time

time.thread_time() vrací součet času systému a CPU (float) v aktuálním spuštěném vlákně. Navíc nezahrnuje čas, který strávíte ve funkci time.sleep(). Vzhledem k tomu, že funkce je specifická pro vlákno, můžete tuto funkci použít k zaznamenání časových rozdílů, pokud Časové odkazy patří do stejného vlákna.

Příklad–

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))

Vysvětlení –

Jako thread_time vrátí vlákno-konkrétní čas, musíme ujistěte se, že používáte odkazy ve stejném podprocesu. Za tímto účelem jsme vytvořili podproces Funkce „Dobrý den“ a vypočítali čas potřebný vláknem uvnitř. Ujistěte se však, že nemůžete získat aktuální čas voláním thread_time (), protože vrací zlomkovou hodnotu. Ale určitě můžete zkontrolovat rozdíl mezi dvěma po sobě jdoucími odkazy, Pokud patří do stejného vlákna.

funkční čas.Process_time

time.process_time() vrací časový odkaz ve zlomkových sekundách (float) součtu systémového času a času CPU aktuálního průběhu. Stejně jako thread_time, tato funkce neměří čas strávený ve funkci time.sleep(). Tato funkce navíc vytvoří odkaz založený na procesu. V důsledku toho bude mít smysl pouze časový rozdíl mezi dvěma po sobě jdoucími odkazy.

Příklad–

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)

Vysvětlení –

začneme s importem process_time funkce a zaznamená čas začátku a konce mezi kód. Jediný rozdíl mezi legacy time.time() a time.proces_time() spočívá v tom, že doba zpracování zaznamenává Časové odkazy aktuálního procesu, zatímco time() zaznamenává absolutní čas systému.

funkční čas.Perf_counter

Perf Counter znamená počítadlo výkonu. Tato funkce vrací hodnotu času s vysokým rozlišením, která je platná po krátkou dobu. Tato funkce se používá k získání přesného časového počtu mezi dvěma odkazy. Vzhledem k tomu, že jiné funkce časovače Pythonu nezahrnují čas spánku, perf_counter jej také nezahrnuje. Pojďme se přesunout na příklad –

Příklad–

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) 

Vysvětlení –

můžete použít perf pult stejným způsobem jako proces časovač nebo vlákno časovače. Jediným rozdílem je, že počítadlo perf vrátí vysokou přesnou hodnotu uplynulého času. Ujistěte se však, že to používáte mezi malými procesy, protože používá vysokou přesnost. Použili jsme jednoduchou smyčku, abychom zkontrolovali čas, který to zabere.

funkční čas.monotonic

Monotonic je python časovač, který se nemůže vrátit zpět. Při provádění skriptu python může uživatel změnit čas a může mít obrovský rozdíl v implementaci časovače v Pythonu. Monotónní časovač však zajišťuje, že Časové odkazy se přizpůsobí vnějším změnám.

Příklad–

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) 

Vysvětlení –

Musíme nejprve importovat monotónní funkce z času modulu. Poté vytvořte dva odkazy s názvem začátek a konec v horní a dolní části kódu. Tím se změří čas mezi dvěma odkazy a zabrání se všem vnějším změnám systémových časů.

vlastní třídy časovače Python

můžete si vytvořit vlastní třídu časovače, abyste mohli dělat věci podle svých potřeb. Jednou z hlavních výhod vytvoření vlastní třídy je, že můžete spravovat po celou dobu v jednom řádku. Nemusíte importovat časovou třídu pokaždé a zaznamenávat odkazy. Kromě toho můžete vypsat data a zaznamenat všechny minulé časové popravy a vybrat pro vás nejlepší algoritmus.

tato část vytvoří vlastní třídu pro správu času a zaznamenávání všech časových rozdílů ve vašich kódech. Pojďme se do toho ponořit –

časovač.py–

začneme importem časového modulu. Poté inicializujte třídu časovače Pythonu a začněte Definovat atributy a metody. Zatím jsme zahrnuli pouze základní atribut, abychom udrželi počáteční odkaz na třídu. Aby to bylo složitější, můžete vytvořit více atributů. Zatím jsou uvedeny tři metody–

  1. start – (volitelné) pro spuštění časovače.
  2. log – Chcete-li zaznamenat aktuální uplynulý čas týkající se času zahájení.
  3. milestone-resetování časovače a spuštění jeho počtu 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 –

příklady použití výše uvedené třídy jsou uvedeny níže. Jak můžete vidět, můžete svůj kód udržovat v čistotě vytvořením vlastní třídy časovače a zvýšit flexibilitu.

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

Výstup–

Time log - 0.054854631423950195Time log - 0.10871052742004395

Python Časovač pomocí řezání Závitů

Když chceme provádět nějaké operace, nebo chcete naše funkce pro spuštění po určitou dobu, používáme Python Časovač třídy. Třída timer je podtřída třídy threading. Technicky lze říci, že vytváříme objekty časovače, když chceme akce (funkce) ohraničené časem.

Předpokládejme například, že chceme uspořádat kvíz, kde účastník musí odpovědět na každou otázku za 10 sekund. Zde můžeme vytvořit časovač, který poběží na pozadí, a mezitím bude účastník přemýšlet o odpovědi. Nyní pochopíme, jak vytvořit objekt časovače.

Syntaxe Časovač Třídy v Pythonu

Pokud jste nepochopil, co Časovač třídy, můžete si ji tímto způsobem – Časovač Třída volá funkci po zadaném počtu sekund.

spustit časovač, musíme zavolat start()(stejně jako normální závity), a zastavení časovače, když je ještě v pozadí, můžeme zrušit().

Chcete-li použít třídu časovače, musíme importovat threading class

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

Parametry-

Interval– čas (v sekundách), který chcete čekat, než volat další funkce. Může být buď v float nebo integer. Například po dobu 3 sekund interval=3.

funkce-funkce, kterou chcete volat po zadaném časovém intervalu.

všudypřítomná způsob, jak popsat, *args a **kwargs parametry – vytvoří objekt časovače, který se spouští funkce s argumenty‘ args‘ a klíčové slovo argumenty kwargs po intervalu sekund uplynulo. Args by měl být ve formě seznamu A0 klíčových slov args nebo kwargs ve formě slovníku.

typ návratu –

pouze volá funkci zadanou v parametrech.

metody ve třídě časovače

  1. start () – znamená začátek spuštění časovače.
  2. Cancel ()– během spuštění časovače můžeme zavolat Storno, pokud ho chceme zastavit ().

vytvoření objektu časovače

a. Pochopení základů

abychom pochopili práci objektu časovače, vytvořme malý program, který nám pomůže porozumět základům třídy.

# 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 časovač

Budete lépe pochopit fungování výše uvedeného programu, když se pokusíte spustit na vašem vlastním systému.

b. pomocí metody Storno

se podívejme, jak používat funkci Storno () třídy časovače.

# 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 používat parametr „args“ třídy časovače python

když potřebujeme dát argumenty funkci, kterou je třeba zavolat, použijeme parametr args. Musíme dát argument args v poli.

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

Nyní, když jsme mluvili hodně o čase, jako bonus, udělejme program, který bude fungovat jako odpočítávací časovač.

Odpočítávací Měřič v pythonu

Pomocí časové modul

# 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

Pomocí python Časovač Třídy

# 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

Python Časovače jako Kontext Manažeři

Kontext Manažeři jsou nejlepší způsoby, aby se zabránilo paměti chyby a následné pády. Každý musel vědět o“ S “ prohlášení v Pythonu. Toto prohlášení zajišťuje, že se nemusíme starat o mnoho objektů, abychom je mohli samostatně uzavřít. Každý by ji mohl použít s kombinací funkce s a open (). Takže, když se přesuneme k hlavní otázce, můžeme vytvořit kontextové manažery pro časovače Pythonu?

Ano. Díky více funkcím přetížení můžeme snadno vytvořit vlastní časovač python jako správce kontextu v několika řádcích. Začněme příkladem, kde musíte měřit čas spuštění programu. Bez předefinování všech proměnných lze jeden správce kontextu opakovaně použít k měření času vícekrát. Následující program to demonstruje.

Příklad–

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

Výstup–

Time to finish the task: 0.05392050743103027

Vysvětlení –

začneme tím, že vytvoří třídu pojmenovanou „Timer_Pythonpool.“Poté operátory přizpůsobíme tak, aby byly užitečné jako správce kontextu. __enter__ funkce spustí na začátku kontextu, a __exit__ spustí na konci kontextu. Vytvoření referenčního bodu mezi těmito dvěma funkcemi vám může poskytnout přesný čas potřebný kontextem k provedení.

Python Timer dekoratéry

dekoratéry jsou dodatečnou podporou pro jakýkoli druh funkce. Také nazývá jako metaprogramming, můžete upravit / přidat funkce k němu. Python Timer dekoratéry jsou nejjednodušší způsob, jak implementovat funkce časovače v Pythonu. Jakmile je deklarován, můžete použít dekoratéry v jedné řadě, aniž byste je znali. Přidání k tomu, můžete je použít na každou funkci v kódu a zkontrolovat, který kód trvá nejvíce času na provedení.

Syntax –

Chcete-li vytvořit Řetězový dekorátor, musíte deklarovat více vnořených funkcí. Pojmenujte druhou funkci jako hlavní jméno dekoratéra a vnitřní náhodné jméno. Vnitřní funkce načte odkaz na funkci použitou pod dekorátorem.

Příklad–

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()

Výstup–

Time taken to execute function is 0.24933218955993652

Vysvětlení –

Jako obvykle, začneme s importem nejdůležitějších modulů z python „času.“Dále vytvoříme dekoratéra s názvem“ check_time.“Uvnitř přidáme vnořenou vnitřní funkci, kde můžeme vytvořit odkazy času. Tyto dva odkazy jsou umístěny tak, že oba jsou umístěny mezi provedením funkce.

dále vytvoříme testovací funkci s názvem „úkol“, abychom zkontrolovali, zda náš úkol funguje. Pak na něj přidejte dekoratér. Nyní dekoratér udělá své kouzlo a vytiskne čas potřebný funkcí.

Python Timer Cooldown

Python Timer Cooldown je způsob, jak měřit časovač dozadu. Vytvořením vlastní třídy časovače můžeme zaznamenat čas v každém bodě vašeho kódu. Tuto třídu můžete exportovat jako modul a nainstalovat ji jako závislost do kódu. Pak pomocí jeden řádek, můžete jej importovat–

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.'))

Další Python Časovač Moduly

Python obsahuje tisíce modulů a miliony fragmenty kódu. K použití časovačů Pythonu můžeme vždy použít open-source moduly. Github je největším místem k nalezení takových modulů. Pojďme skočit přímo do těchto modulů–

  1. termdown: pokročilý python časovač vyrobený pomocí různých znaků ASCII. Pomocí tohoto skriptu můžete v terminálu vytvořit jednoduchý odpočítávací časovač a na konci provést příkaz. A co je nejdůležitější, má podporu pro hlasové odpočítávání.
  2. MobTimer.Python: časovač založený na GUI vyrobený v Pythonu. Tento skript vytváří časovače na celou obrazovku s více možnostmi. Spolu s ním můžete pomocí tohoto programu spustit více časovačů na obrazovce současně.
  3. timer: Toto je nejzákladnější časovač založený na GUI vyrobený v Pythonu (Tkinter). Funkce, jako je více časovačů, štítky, a multithreading, aby bylo životaschopnější oproti jiným programům.
  4. codetiming: tato třída časovače zaznamenává všechny vaše minulé doby provádění pro konkrétní pojmenovaný proces. Můžete zkontrolovat minimální čas, maximální čas, mezitím, a střední čas pro konkrétní proces spolu se záznamy. Tento modul lze použít několika způsoby, jmenovitě jako správce kontextu a jako dekoratér.
  5. cTimer: cTime je nanosekundový přesný časovač v Pythonu. Tento modul používá C language API pro přesné zaznamenání času. Pokud hledáte hardcore přesné moduly pro nahrávání času, je to nejlepší. (Poznámka: v posledních aktualizacích Pythonu je přidán časový modul s funkcemi pro záznam času v nanosekundách)

musí číst:

  • Jak Převést Řetězec na Malá písmena
  • Jak Vypočítat druhou odmocninu
  • Uživatelského Vstupu | Vstupní Funkce () | Vstup z Klávesnice
  • Nejlepší Knihu Naučte se Python

Závěr

Většinou, každý používá časovače pro tři účely. První z nich je, zaznamenat čas pro spuštění kódu. A druhá bytost, přidat připomenutí pro něco pomocí časovače. Naštěstí mohou být oba vytvořeny v Pythonu. Pomocí různých modulů a knihoven můžete zajistit, že zaznamenáte čas s přesnou přesností.

v neposlední řadě je časovač podtřídou třídy threading v Pythonu. Pokud chceme spustit jakoukoli funkci po určitém časovém intervalu, můžeme použít třídu časovače python. V parametru args, který ve výchozím nastavení není žádný, můžeme zadat argumenty, které chceme dát metodě zpětného volání.

zkuste spustit programy na vaší straně a dejte nám vědět, pokud máte nějaké dotazy.

You might also like

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.