Python-Ajastinluokan ymmärtäminen esimerkeillä

Pythonilla on tuhansia moduuleja ja kirjastoja, jotka täyttävät koodaajan vaatimukset. Kuitenkin, jotta ne olisivat hyödyllisiä, sinun täytyy ymmärtää ne ensin ja sitten soveltaa niitä. Ilman ennakkotietoa tietyistä moduuleista on epävarmaa, mitä haluat tehdä ja mitä moduuli itse asiassa tekee. Aika on yksi tärkeä tekijä koodausongelmissa. Kaikkien koodien on tarkoitus vähentää ihmisten työtä niiden tehokkaiden algoritmien avulla. Ajanhallinta luo suuren vaikutuksen koodin suorituskyvyn analysointiin. Siksi tänään, opimme perusteellisesti siitä, miten ajastin toimii Python.

Python-Ajastin on luokka / kirjasto, jolla voi hallita koodin ajallista monimutkaisuutta. Käyttämällä useita aikamoduuleja, voit luoda järjestelmän koodin tarkistaa aika kuluu vastaavan koodin pätkä. Pythonissa on erilaisia ajastintoteutuksia käyttäjän tarpeiden mukaan, nimittäin python ajastintoiminto (komentosarjan suoritusajan tarkistamiseksi), python threading timer (kierteen viimeistelyyn kuluvan ajan tarkistamiseksi), python countdown timer (luo ajastin) ja basic python time module (muiden toimintojen auttamiseksi).

kaikki nämä ajastimet toimivat eri tavalla ja keskittyvät tarjoamaan loppukäyttäjälle erilaista käyttöä. Tässä viestissä, käymme läpi jokaisen ajastimen täytäntöönpanoa yksityiskohtaisesti. Voit käyttää sisällysluetteloa hypätäksesi vastaavaan python-ajastimen toteutukseen.

luettelo

Python-ajastimen Perusfunktiot

Pythonin tärkein moduuli ajan suhteen on aika. Tämä moduuli sisältää kaikki perustoiminnot tarkistaa aikaa ja analysoida sitä. Tämä analyysi auttaa sinua ymmärtämään koodin suorituskykyä ja sen tehokkuutta. Käymme läpi kaikki tärkeät toiminnot tästä moduulista yhdessä sen esimerkkien kanssa.

Seuraavassa on Python-ajastimen perusfunktiot aikamoduulia käyttäen–

  • aika.aika ()
  • aika.thread_time ()
  • time.process_time ()
  • time.perf_counter ()
  • aika.monotoninen()

aika toimia.aika

time.time() palauttaa ajan sekunteina (kellunta) epookin jälkeen. Yleensä aikakausi sijoittuu tammikuulle 1, 1970, 00:00:00 (UTC), ja tämän aikakauden jälkeisten sekuntien määrä palautetaan. Tämä toiminto riippuu tietokoneen ajasta laskettaessa sekunteja. Jos muutat tietokoneen aikaa python-suorituksen välillä, voit saada outoja numeroita käyttämällä tätä toimintoa.

esimerkki–

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

selitys –

ensin aloitetaan aikamoduulin tuominen. Tämä moduuli sisältää kaikki perusaikafunktiot, joita käytämme tässä osiossa. Koodin alussa ilmoitetaan start-muuttuja time.time(). Tämä tallentaa suorittimen nykyisen ajan kelluntanumeroon aikakaudelta. Käytämme tätä aloitusmuuttujaa vertailukohtana ajan mittaamiseen. Seuraava osa sisältää kaikki koodit haluat käyttää (tässä esimerkissä, olemme käyttäneet a silmukoita). Samoin, tallentaa päättymisaika suorittimen (oletusaika) ja tarkistaa koko suoritusaika käyttämällä end-start.

Tämä tulostaa koodin ottaman ajan sekunneissa. Käyttämällä tätä tekniikkaa, voit tarkistaa aika kuluu koodin. Ainoa ongelma tässä menetelmässä on, että suorittimen aikaa voidaan muuttaa koodin ollessa käynnissä. Tämä johtaa ongelmalliseen käyttäytymiseen python-ajastimessa.

Toimintoaika.Thread_time

time.thread_time() palauttaa järjestelmän ja SUORITINAJAN (float) summan nykyisessä juoksevassa säkeessä. Lisäksi se ei sisällä time.sleep() – funktioon kuluvaa aikaa. Koska funktio on säiekohtainen, voit käyttää tätä funktiota aikaerojen kirjaamiseen, kunhan aikaviitteet kuuluvat samaan säkeeseen.

esimerkki–

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

selitys –

koska thread_time palaa kierrekohtaisesti, meidän on varmistettava, että käytämme viittauksia samaan lankaan. Tätä tarkoitusta varten, olemme instantiated Lanka funktio ’ Hei ’ ja laskettu aika, jonka Lanka sen sisällä. Varmista kuitenkin, että et saa nykyistä aikaa kutsumalla thread_time (), koska se palauttaa murto-osan arvon. Mutta voit varmasti tarkistaa kahden peräkkäisen viittauksen eron, kunhan ne kuuluvat samaan lankaan.

Toimintoaika.Process_time

time.process_time() palauttaa aikareferenssin senhetkisen edistymisen systeemi-ja SUORITINAJAN summan sekunnin murto-osina (float). Sama kuin thread_time, tämä funktio ei mittaa time.sleep() funktioon käytettyä aikaa. Lisäksi tämä funktio luo referenssin prosessin perusteella. Tämän seurauksena vain aikaero kahden peräkkäisen viittauksen välillä on järkevä.

esimerkki–

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)

selitys –

aloitamme tuomalla process_time-funktion ja tallennamme alkamis-ja päättymisajan koodin välillä. Ainoa ero Legacyn time.time() ja time.proces_time() välillä on se, että käsittelyaika tallentaa nykyisen prosessin aikaviitteet, kun taas time() tallentaa järjestelmän absoluuttisen ajan.

Toimintoaika.Perf_counter

Perf Counter tulee sanoista Performance Counter. Tämä funktio palauttaa ajan korkean resoluution arvon, joka on voimassa lyhyen aikaa. Tällä funktiolla saadaan tarkka aikaluku kahden viitteen välillä. Koska muut python-ajastintoiminnot eivät sisällä uniaikaa, perf_counter ei myöskään sisällä sitä. Siirrytään esimerkkiin –

esimerkki–

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) 

selitys –

voit käyttää perf-laskuria samalla tavalla kuin prosessiajastinta tai kierreajastinta. Ainoa ero on, perf laskuri palauttaa korkea tarkka arvo kulunut aika. Mutta varmista, että käytät tätä pienten prosessien välillä, koska se käyttää suurta tarkkuutta. Olemme käyttäneet yksinkertaista silmukkaa tarkistaaksemme sen vaatiman ajan.

Toimintoaika.monotonic

Monotonic on python-ajastin, joka ei voi mennä taaksepäin. Python-komentosarjaa suoritettaessa käyttäjä voi muuttaa aikaa ja se voi tehdä valtavan eron ajastimen toteutuksessa Pythonissa. Mutta monotoninen ajastin varmistaa, että aika viittaukset sopeutua ulkoisiin muutoksiin.

esimerkki–

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) 

selitys –

tuomme ensin monotonisen funktion aikamoduulista. Luo sitten kaksi viittausta, joiden nimi on alku ja loppu koodin ylä-ja alalaidassa. Tämä mittaa kahden viittauksen välistä aikaa ja välttää kaikki ulkoiset muutokset järjestelmän ajoihin.

Custom Python Timer Classes

voit luoda oman mukautetun Ajastinluokan, jolla voit tehdä asioita tarpeesi mukaan. Yksi tärkein etu luoda mukautetun luokan on voit hallita koko ajan yhdellä rivillä. Sinun ei tarvitse tuoda aikaluokkaa joka kerta ja tallentaa viittaukset. Lisäksi, voit dump tietosi ja tallentaa kaikki menneen ajan teloitukset valita paras algoritmi sinulle.

tämä osio luo mukautetun luokan, jolla voit hallita aikaa ja kirjata kaikki aikaerot koodeihisi. Sukelletaan suoraan siihen –

ajastin.py–

aloitamme aikamoduulin Tuomisella. Alustaa python-Ajastinluokka ja aloita attribuuttien ja menetelmien määrittely. Tähän mennessä olemme sisällyttäneet vain perusattribuutin pitämään luokan aloitusviitteen. Jotta se olisi monimutkaisempi, voit luoda useita attribuutteja. Tähän mennessä on kolme menetelmää lueteltu alla–

  1. Käynnistä – (valinnainen) ajastimen käynnistämiseksi.
  2. log-to log-To log the current examined time concerning start time.
  3. milestone-Nollaa ajastin ja aloita sen laskenta nollasta.
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 –

alla on esimerkkejä edellä mainitun luokan käytöstä. Kuten näet, voit pitää koodin puhtaana luomalla mukautetun Ajastinluokan ja lisätä joustavuutta.

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

tuloste–

Time log - 0.054854631423950195Time log - 0.10871052742004395

Python-ajastin käyttäen Kierteitystä

kun haluamme suorittaa jonkin toiminnon tai haluamme toimintomme suoritettavan tietyn ajan kuluttua, käytämme Python-Ajastinluokkaa. Ajastinluokka on kierteisluokan alaluokka. Teknisesti voidaan sanoa, että luomme Ajastusobjekteja, kun haluamme toimia (toimintoja), joita aika rajoittaa.

Oletetaan esimerkiksi, että haluamme järjestää tietokilpailun, jossa osallistujan on vastattava jokaiseen kysymykseen 10 sekunnissa. Täällä voimme luoda ajastimen, joka kulkee taustalla, ja samaan aikaan osallistuja miettii vastausta. Nyt, olkaamme ymmärtää, miten luoda ajastin objekti.

Pythonin Ajastinluokan syntaksi

jos et ole ymmärtänyt, mitä Ajastinluokka tekee, voit ajatella sitä näin – Ajastinluokka kutsuu funktiota määrätyn sekuntimäärän jälkeen.

ajastimen käynnistämiseksi on kutsuttava käynnistys () (aivan kuten normaalit kierteet), ja ajastimen pysäyttämiseksi sen ollessa vielä taustalla voidaan soittaa peruuta ().

Ajastinluokan käyttämiseksi meidän on tuotava kierteitysluokka

kierteitys.Ajastin (intervalli, funktio, args=Ei mitään, kwargs=Ei mitään)

parametrit-

intervalli– aika (sekunteina), jonka haluat odottaa ennen seuraavan funktion kutsumista. Se voi olla joko float tai kokonaisluku. Esimerkiksi 3 sekunnin ajan intervalli=3.

funktio – funktio, johon haluat soittaa tietyn ajan kuluttua.

Läpitunkeva tapa kuvata *args – ja **kwargs-parametreja on-luoda ajastusobjekti, joka ajaa funktiota argumenteilla ”args” ja avainsanaväitteillä ”kwargs” intervallisekuntien mentyä ohi. Args pitäisi olla muodossa luettelon JA0 avainsanan args tai kwargs muodossa sanakirjan.

Paluutyyppi –

se vain kutsuu muuttujissa määriteltyä funktiota.

menetelmät Ajastinluokassa

  1. aloitus() – se merkitsee ajastimen suorittamisen alkua.
  2. Peruuta () – ajastimen suorituksen aikana voimme soittaa Peruuta, jos haluamme pysäyttää sen ().

Ajastusobjektin luominen

a. Perusasioiden ymmärtäminen

Ajastusobjektin toiminnan ymmärtämiseksi luodaanpa pieni ohjelma, joka auttaa meitä ymmärtämään luokan perusasiat.

# 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-ajastin

ymmärrät paremmin yllä olevan ohjelman toiminnan, kun yrität ajaa sitä omalla järjestelmälläsi.

b. peruuta-menetelmällä

katsotaan, miten Ajastusluokan peruuta () – funktiota käytetään.

# 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

n. Kuinka käyttää python-ajastinluokan ”args” – parametria

kun pitää antaa argumentit sille funktiolle, jota pitää kutsua, käytetään args-parametria. Meidän on annettava args argumentti array.

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

nyt kun olemme puhuneet paljon ajasta, bonuksena, tehkäämme ohjelma, joka toimii ajastimena.

lähtölaskenta Pythonissa

aikamoduulia käyttäen

# 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

python-Ajastinluokan käyttäminen

# 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-ajastimet Kontekstinhallintoina

Kontekstinhallintoina ovat parhaita tapoja välttää muistivirheitä ja niitä seuraavia kaatumisia. Kaikkien on täytynyt tietää Pythonin ”kanssa” – lauseesta. Tämä lausunto varmistaa, että meidän ei tarvitse huolehtia monia esineitä sulkea itsenäisesti. Jokainen on voinut käyttää sitä yhdistelmä kanssa ja avoin () funktio. Joten, siirrytään tärkein kysymys, voimmeko luoda asiayhteyden johtajat Python ajastimet?

Kyllä. Useiden ylikuormitustoimintojen ansiosta voimme helposti luoda oman python-ajastimen kontekstinhallintana vain muutamalla rivillä. Aloitetaan esimerkistä, jossa täytyy mitata ohjelman suoritusaika. Määrittelemättä kaikkia muuttujia uudelleen, yhtä asiayhteyshallintaa voidaan käyttää toistuvasti ajan mittaamiseen useita kertoja. Seuraava ohjelma osoittaa sen.

esimerkki–

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

tuloste–

Time to finish the task: 0.05392050743103027

selitys –

aloitamme luomalla luokan nimeltä ” Timer_Pythonpool.”Sitten muokkaamme operaattorit niin, että ne ovat hyödyllisiä kontekstinhallintana. __ enter__ funktio suoritetaan kontekstin alussa ja __exit__ suoritetaan kontekstin lopussa. Luotaessa vertailukohta näiden kahden toiminnon välillä voidaan antaa tarkka aika, jonka konteksti suorittaa.

Python Timer Decorators

Decorators on lisätuki kaikenlaisille toiminnoille. Myös kutsutaan metaprogramming, voit muokata / lisätä toimintoja siihen. Python ajastin Koristelijat ovat helpoin tapa toteuttaa ajastintoiminnot python. Kun olet ilmoittanut, voit käyttää sisustajia yhdessä rivissä edes tietämättä heitä. Lisäämällä siihen, voit soveltaa niitä jokaiseen funktio koodin tarkistaa, mikä koodi vie eniten aikaa suorittaa.

syntaksi –

ketjutetun koristelijan luominen edellyttää useiden sisäkkäisten funktioiden julistamista. Nimeä toinen toiminto tärkein sisustaja nimi ja sisäinen tahansa satunnainen nimi. Sisäinen funktio hakee viite funktio käytetään alla sisustus.

esimerkki–

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

tuloste–

Time taken to execute function is 0.24933218955993652

selitys –

kuten tavallista, aloitamme tuomalla Pythonin tärkeimmän moduulin ” time.”Seuraavaksi luomme sisustajan nimeltä” check_time.”Sen sisään lisätään sisäkkäinen sisäinen funktio, jossa voimme luoda viittauksia aikaan. Nämä kaksi viittausta on sijoitettu siten, että molemmat sijoittuvat funktion suorituksen väliin.

lisäksi luomme ”tehtävä” – nimisen testifunktion tarkastaaksemme, toimiiko tehtävämme. Lisää sen päälle sisustaja. Nyt sisustaja tekee taikansa ja tulostaa tehtävän vaatiman ajan.

Python Timer Loaddown

Python Timer Loaddown on tapa mitata ajastin taaksepäin. Luomalla mukautetun ajastinluokan voimme kirjata ajan koodin jokaisessa pisteessä. Voit viedä tämän luokan moduulina ja asentaa sen riippuvuutena koodiisi. Sitten käyttämällä yhden rivin, voit tuoda sen–

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

muut Python-Ajastinmoduulit

Python sisältää tuhansia moduuleja ja miljoonia koodinpätkiä. Voimme aina käyttää avoimen lähdekoodin moduuleja python-ajastimien käyttämiseen. Github on suurin paikka löytää tällaisia moduuleja. Hypätään suoraan näihin moduuleihin–

  1. termdown: kehittynyt python-ajastin, joka on tehty käyttämällä erilaisia ASCII-merkkejä. Käyttämällä tätä komentosarjaa, voit luoda yksinkertaisen ajastimen päätelaitteeseesi ja suorittaa komennon lopussa. Mikä tärkeintä, se on tuki ääni countdown.
  2. MobTimer.Python: GUI-pohjainen ajastin, joka on tehty Pythonilla. Tämä script luo koko näytön ajastimet useita vaihtoehtoja. Yhdessä sen kanssa, voit ajaa useita ajastimia ruudulla samaan aikaan käyttämällä tätä ohjelmaa.
  3. ajastin: tämä on perustason GUI-pohjainen ajastin, joka on tehty Pythonilla (Tkinter). Ominaisuudet, kuten useita ajastimia, tarrat, ja monilukeminen tekevät siitä elinkelpoisemman yli muiden ohjelmien.
  4. codetiming: tämä ajastinluokka tallentaa kaikki aiemmat suoritusajat tietylle nimetylle prosessille. Voit tarkistaa vähimmäisaika, enimmäisaika, sillä välin, ja mediaani aika tietyn prosessin sekä kirjaa. Tätä moduulia voidaan käyttää useilla tavoilla, nimittäin kontekstinhallintana ja sisustajana.
  5. cTimer: cTime on nanosekunnin tarkkuudella toimiva ajastin Pythonissa. Tämä moduuli käyttää C-kielen API tallentaa ajan tarkasti. Jos etsit hardcore tarkkuus aika tallennus moduulit, tämä on paras. (Huom: Pythonin viimeaikaisissa päivityksissä aikamoduuliin lisätään toimintoja, jotka tallentavat aikaa nanosekunteina)

pakko lukea:

  • Kuinka muuntaa merkkijono pieniksi kirjaimiksi
  • Miten lasketaan neliöjuuri
  • käyttäjän Tulo | Tulo () toiminto | Näppäimistötulo
  • paras kirja oppia Python

johtopäätös

useimmiten kaikki käyttävät ajastimia kolmeen tarkoitukseen. Ensimmäinen on, tallentaa aikaa koodin suorittamisen. Ja toinen on, lisätä muistutus jotain käyttämällä ajastinta. Onneksi molemmat voidaan luoda Pythonilla. Käyttämällä erilaisia moduuleja ja kirjastoja voit varmistaa, että tallennat ajan tarkasti.

viimeinen, mutta ei vähäisin, ajastin on Python-kielessä threading-luokan alaluokka. Jos haluamme suorittaa jonkin toiminnon tietyn ajan kuluttua, voimme käyttää python-ajastinluokkaa. Vuonna args parametri, joka ei ole mikään oletuksena, voimme määrittää argumentit haluamme antaa callback menetelmä.

yritä ajaa ohjelmat omalla puolellasi ja kerro meille, jos sinulla on kysyttävää.

You might also like

Vastaa

Sähköpostiosoitettasi ei julkaista.