Piton

Vodič za Python Asyncio

Vodič za Python Asyncio
Asyncio knjižnica je predstavljena u python 3.4 za izvršavanje paralelnih programa s jednim navojem. Ova je knjižnica popularna od ostalih knjižnica i okvira zbog svoje impresivne brzine i raznolike upotrebe. Ova se knjižnica koristi u pythonu za stvaranje, izvršavanje i strukturiranje podprograma i istovremeno obrađivanje više zadataka bez paralelnog obavljanja zadataka. Glavni dijelovi ove knjižnice definirani su u nastavku:

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 asyncio
async 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.py

Izlaz 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 asyncio
async 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.py

Izlaz 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 asyncio
async 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.py

U 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.

Kako koristiti Xdotool za poticanje klikova i pritiska miša u Linuxu
Xdotool je besplatni alat za naredbene retke otvorenog koda za simulaciju klikova mišem i pritiska tipki. Ovaj će članak pokrivati ​​kratki vodič o ko...
Top 5 ergonomskih proizvoda za računalni miš za Linux
Uzrokuje li dugotrajno korištenje računala bolove u zapešću ili prstima? Patite li od ukočenih zglobova i stalno se morate rukovati? Osjećate li goruć...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...