Koroutina: Dio koda koji se može pauzirati i nastaviti u skriptu s više niti naziva se koroutina. podprogrami rade zajedno u programu s više niti. Kada jedna koroutina zastane, onda se druga koroutina može izvršiti.
Petlja događaja: Koristi se za započinjanje izvršavanja suprograma i rukovanje ulazno / izlaznim operacijama. Potrebno je više zadataka i dovršite ih.
Zadatak: Izvršenje i rezultat podprograma definirani su zadacima. Pomoću biblioteke asyncio možete dodijeliti višestruki broj zadataka i izvršavati ih asinkrono.
Budućnost: Djeluje kao buduće spremište u kojem će se rezultat koroutina pohraniti nakon završetka. To je korisno kada bilo koja koroutina treba pričekati rezultat druge koroutine.
Kako možete implementirati gornje koncepte biblioteke asyncio, prikazano je u ovom vodiču pomoću nekoliko jednostavnih primjera.
Primjer-1: Stvorite jedinstvenu potprogram s jednim zadatkom
Stvorite datoteku s imenom async1.py i dodajte sljedeći kod. knjižnica asyncio uvezena je za korištenje funkcija ove knjižnice. dodati funkcija je proglašena za izračunavanje zbroja određenog raspona brojeva. Raspon brojeva od 1 do 101 zadatak zadaje s jednom sekundom kašnjenja. Petlja događaja je proglašena da će se izvoditi sve dok ne završe svi zadaci glavne metode. Nakon izračuna vrijednosti, funkcija će pričekati jednu sekundu i ispisat će rezultat.
uvoziti asyncioasync def add (start, end, wait):
#Initializiraj varijablu zbroja
zbroj = 0
# Izračunaj zbroj svih brojeva
za n u rasponu (početak, kraj):
zbroj + = n
# Pričekajte dodijeljene sekunde
čekati asincija.spavati (čekati)
# Ispišite rezultat
ispis (f'Sum od početka do kraja je zbroj ')
async def main ():
# Dodijelite jedan zadatak
zadatak = petlja.create_task (dodaj (1.101,1))
# Izvedite zadatak asinkrono
čekati asincija.pričekati ([zadatak])
ako je __name__ == '__glavno__':
#Declare petlja događaja
petlja = asyncio.get_event_loop ()
# Pokrenite kôd dok ne dovršite sav zadatak
petlja.run_until_complete (main ())
#Zatvorite petlju
petlja.Zatvoriti()
Izlaz:
$ python3 async1.pyIzlaz prikazuje zbroj od 1 do 101 što je 5050.
Primjer-2: Stvaranje višestrukih programa
Upotreba asyncio biblioteke bit će obrisana kada istodobno pokrenete više koprograma. Stvorite novu datoteku s imenom async2.py i dodajte sljedeći kod. Tri zadatka generiraju se s tri različita raspona i vrijednosti čekanja u glavni() metoda. Prvi zadatak izračunat će zbroj od 5 do 500000 čekanjem 3 sekunde, drugi zadatak izračunat će zbroj od 2 do 300000 čekanjem 2 sekunde, a treći zadatak izračunat će zbroj od 10 do 1000 čekanjem 1 sekunde. Zadatak s malim vrijednostima čekanja završit će se isprva, a zadatak s visokom vrijednošću čekanja završit će se napokon.
uvoziti asyncioasync def add (start, end, wait):
#Initializiraj varijablu zbroja
zbroj = 0
# Izračunaj zbroj svih brojeva
za n u rasponu (početak, kraj):
zbroj + = n
# Pričekajte dodijeljene sekunde
čekati asincija.spavati (čekati)
# Ispišite rezultat
ispis (f'Sum od početka do kraja je zbroj ')
async def main ():
#Dodijeli prvi zadatak
zadatak1 = petlja.create_task (dodaj (5,500000,3))
#Dodijeli drugi zadatak
zadatak2 = petlja.create_task (dodaj (2.300.000,2))
# Dodijelite treći zadatak
zadatak3 = petlja.create_task (dodaj (10,1000,1))
# Izvršite zadatke asinkrono
čekati asincija.pričekajte ([zadatak1, zadatak2, zadatak3])
ako je __name__ == '__glavno__':
#Declare petlja događaja
petlja = asyncio.get_event_loop ()
# Pokrenite kôd dok ne dovršite sav zadatak
petlja.run_until_complete (main ())
#Zatvorite petlju
petlja.Zatvoriti()
Izlaz:
$ python3 async1.pyIzlaz pokazuje da je zadatak3 prvi dovršen jer je vrijeme čekanja ovog zadatka bilo samo 1 sekunda, a zadatak1 dovršen zadnji jer je vrijeme čekanja ovog zadatka bilo 3 sekunde.
Primjer-3: podprogrami s budućnošću
Ovaj primjer pokazuje upotrebu budućeg objekta biblioteke asyncio. Stvorite novu datoteku s imenom async3.py i dodajte sljedeći kod. U ovom su primjeru za budućnost dodijeljena dva zadatka. show_message ovdje je deklarirana funkcija za ispis poruke prije izvršavanja zadataka i nakon završetka izvršenja. Prvi će zadatak pričekati 2 sekunde, a završiti zadnji. Drugi zadatak pričekat će 1 sekundu i završit će prvi.
uvoziti asyncioasync def show_message (broj, pričekaj):
# Ispišite poruku
ispis (f'Task broj je pokrenut ')
# Pričekajte dodijeljene sekunde
čekati asincija.spavati (čekati)
ispis (f'Zadatak broj je dovršen ')
async def stop_after (kada):
čekati asincija.spavati (kada)
petlja.Stop()
async def main ():
#Dodijeli prvi zadatak
zadatak1 = asincij.osigurati_futuru (show_message (1,2))
ispis ('Prilog 1')
#Dodijeli drugi zadatak
zadatak2 = asincij.osigurati_futuru (show_message (2,1))
ispis ('Prilog 2')
# Izvršite zadatke asinkrono
čekati asincija.pričekajte ([zadatak1, zadatak2])
ako je __name__ == '__glavno__':
#Declare petlja događaja
petlja = asyncio.get_event_loop ()
# Pokrenite kod glavne metode dok ne dovršite sav zadatak
petlja.run_until_complete (main ())
Izlaz:
$ python3 async3.pyU izlazu je prikazano da je zadatak1 prvi pokrenut i dovršen zadnji, a zadatak2 pokrenut kasnije, ali dovršen prvi na kratko vrijeme čekanja.
Zaključak
Ovdje je objašnjen osnovni koncept asinkronog programiranja pomoću asyncio biblioteke pythona. Nadam se, moći ćete napisati kod s više niti u pythonu nakon vježbanja primjera ovog vodiča.