Python

Pythoni Asyncio õpetus

Pythoni Asyncio õpetus
Asyncio teeki tutvustatakse python 3-s.4 üheahelaliste samaaegsete programmide käivitamiseks. See raamatukogu on oma muljetavaldava kiiruse ja mitmekülgse kasutamise poolest populaarne kui teised raamatukogud ja raamistikud. Seda teeki kasutatakse pythonis korutiinide loomiseks, käivitamiseks ja struktureerimiseks ning mitme ülesande samaaegseks käsitsemiseks, ilma et need toimuksid paralleelselt. Selle raamatukogu suuremad osad on määratletud allpool:

Korutiin: Koodiosa, mida saab peatada ja jätkata mitmekeermelises skriptis, nimetatakse koroutiiniks. korutiinid töötavad koostöös mitmekülgsete programmidega. Kui üks korutiin teeb pausi, saab teine ​​korutiin käivitada.

Sündmuse silmus: Seda kasutatakse korutiinide käivitamise alustamiseks ja sisend- / väljundoperatsioonide haldamiseks. See võtab mitu ülesannet ja nende täitmise.

Ülesanne: Korutiinide teostamine ja tulemus on määratletud ülesannetega. Asyncio teegi abil saate määrata mitu ülesannet ja käivitada ülesandeid asünkroonselt.

Tulevik: See toimib tulevase salvestusruumina, kuhu korutiinide tulemus pärast valmimist salvestub. See on kasulik, kui mis tahes korutiin nõuab muu korutiini tulemuse ootamist.

Kuidas saate ülaltoodud asyncio teegi mõisteid rakendada, on selles õpetuses näidatud mõned lihtsad näited.

Näide 1: looge ühe ülesandega üks korutiin

Looge fail nimega asünkroon1.py ja lisage järgmine kood. asyncio teek imporditakse selle teegi funktsioonide kasutamiseks. lisama funktsioon deklareeritakse konkreetse arvude vahemiku summa arvutamiseks. Numbrivahemiku 1 kuni 101 määrab ülesanne ühe sekundilise viivitusega. Sündmuse silmus on deklareeritud, et see töötab seni, kuni kõik peamise meetodi ülesanded on lõpule viidud. Pärast väärtuse arvutamist ootab funktsioon ühe sekundi ja prindib tulemuse.

impordi asyncio
async def add (algus, lõpp, oot):
# Initsialiseerige muutuja
summa = 0
# Arvutage kõigi arvude summa
n vahemikus (algus, lõpp):
summa + = n
# Oodake määratud sekundeid
ootama asyncio.magama (ootama)
#Prindi tulemus
print (f'Sum vahemikus algus kuni lõpp on summa ')
async def main ():
# Määrake üks ülesanne
ülesanne = silmus.create_task (lisa (1 101,1))
# Käivita ülesanne asünkroonselt
ootama asyncio.oota ([ülesanne])
kui __nimi__ == '__main__':
#Deklareeri sündmuse silmus
silmus = asyncio.get_event_loop ()
# Käivitage kood kuni kogu ülesande täitmiseni
silmus.run_until_complete (main ())
#Sulgege silmus
silmus.Sulge()

Väljund:

$ python3 async1.py

Väljund näitab summa 1 kuni 101, mis on 5050.

Näide 2: looge mitu korutiini

Asyncio teegi kasutamine kustutatakse, kui käivitate korraga mitu korutiini. Looge uus nimega fail asünkroon2.py ja lisage järgmine kood. Luuakse kolm ülesannet kolme erineva vahemiku ja ooteväärtusega peamine () meetod. Esimene ülesanne arvutab summa vahemikus 5 kuni 500000, oodates 3 sekundit, teine ​​ülesanne arvutab summa vahemikus 2 kuni 300000, oodates 2 sekundit ja kolmas ülesanne arvutab summa vahemikus 10 kuni 1000, oodates 1 sekundit. Madala ooteväärtusega ülesanne saab algul lõpule ja kõrge ooteväärtusega ülesanne lõpuks.

impordi asyncio
async def add (algus, lõpp, oot):
# Initsialiseeri muutuja
summa = 0
# Arvutage kõigi arvude summa
n vahemikus (algus, lõpp):
summa + = n
# Oodake määratud sekundeid
ootama asyncio.magama (ootama)
#Prindi tulemus
print (f'Sum algusest lõpuni on summa ')
async def main ():
#Määra esimene ülesanne
task1 = silmus.create_task (lisa (5 500 000 3))
#Määra teine ​​ülesanne
task2 = silmus.create_task (lisa (2,300000,2))
# Määra kolmas ülesanne
task3 = silmus.create_task (lisa (10,1000,1))
# Käivitage ülesanded asünkroonselt
ootama asyncio.oota ([ülesanne1, ülesanne2, ülesanne3])
kui __nimi__ == '__main__':
#Deklareeri sündmuse silmus
silmus = asyncio.get_event_loop ()
# Käivitage kood kuni kogu ülesande täitmiseni
silmus.run_until_complete (main ())
#Sulgege silmus
silmus.Sulge()

Väljund:

$ python3 async1.py

Väljund näitab, et ülesanne3 on esimene, kuna selle ülesande ooteaeg oli vaid 1 sekund ja ülesanne1 on viimane, kuna selle ülesande ooteaeg oli 3 sekundit.

Näide 3: korutiinid tulevikuga

See näide näitab asyncio teegi tulevase objekti kasutamist. Looge uus nimega fail asünkroon3.py ja lisage järgmine kood. Selles näites on tulevikuks määratud kaks ülesannet. näita_sõnum Funktsioon on siin deklareeritud sõnumi printimiseks enne korutiini käivitamist ja pärast täitmise lõpetamist. Esimene ülesanne ootab 2 sekundit ja lõpeb viimasena. Teine ülesanne ootab 1 sekundit ja täidab kõigepealt.

impordi asyncio
async def show_message (arv, oota):
#Prindi sõnum
print (f 'Ülesanne number töötab')
# Oodake määratud sekundeid
ootama asyncio.magama (ootama)
print (f'ülesanne number on lõpetatud ')
async def stop_after (millal):
ootama asyncio.magama (kui)
silmus.peatus ()
async def main ():
#Määra esimene ülesanne
task1 = asünkroos.tagada_tulevik (näita_sõnumit (1,2))
print ('Graafik 1')
#Määra teine ​​ülesanne
task2 = asyncio.tagada_tulevik (näita_sõnumit (2,1))
print ('Graafik 2')
# Käivitage ülesanded asünkroonselt
ootama asyncio.oota ([ülesanne1, ülesanne2])
kui __nimi__ == '__main__':
#Deklareeri sündmuse silmus
silmus = asyncio.get_event_loop ()
# Käivitage põhimeetodi kood kuni kogu ülesande täitmiseni
silmus.run_until_complete (main ())

Väljund:

$ python3 async3.py

Väljundis on näidatud, et ülesanne1 käivitatakse kõigepealt ja lõpetatakse viimasena ning ülesanne2 käivitatakse hiljem, kuid täidetakse kõigepealt lühikese ooteaja jaoks.

Järeldus

Asünkroonse programmeerimise põhimõistet, kasutades Pythoni asyncio teeki, selgitatakse siin. Loodetavasti saate pärast selle õpetuse näidete harjutamist kirjutada Pythonis mitmekeermelise koodi.

Kuidas FPS-i suurendada Linuxis?
FPS tähistab Kaadrit sekundis. FPS-i ülesanne on mõõta kaadrisagedust video taasesitamisel või mängude esitamisel. Lihtsamalt öeldes nimetatakse iga s...
Parimad Oculus App Lab mängud
Kui olete Oculuse peakomplekti omanik, peate olema teadlik külglaadimisest. Kõrvalaadimine on protsess, millega installitakse peakomplekti mitte-poesi...
10 parimat mängu, mida Ubuntu kaudu mängida
Windowsi platvorm on olnud üks mängude domineerivaid platvorme, kuna tohutu protsent mänge areneb täna Windowsi loomupäraseks toetamiseks. Kas keegi s...