Korutina: Kodo dalis, kurią galima pristabdyti ir atnaujinti daugialypiu scenarijumi, vadinama korutine. korutinai bendradarbiauja daugybėje programų. Kai vienas korutinas pristabdomas, kitas korutinas gali vykdyti.
Įvykio ciklas: Jis naudojamas korutinų vykdymui pradėti ir įvesties / išvesties operacijoms tvarkyti. Tam reikia kelių užduočių ir jas atlikti.
Užduotis: Korutinų vykdymą ir rezultatą apibrėžia užduotys. Galite priskirti kelis užduočių skaičius naudodami „asyncio“ biblioteką ir paleisti užduotis asinchroniškai.
Ateitis: Jis veikia kaip būsima saugykla, kur baigiant korutinų rezultatas bus saugomas. Tai naudinga, kai bet kuris korutinas reikalauja laukti kito korutino rezultato.
Kaip galite įgyvendinti aukščiau pateiktas „asyncio“ bibliotekos sąvokas, parodyta šioje pamokoje naudojant keletą paprastų pavyzdžių.
1 pavyzdys: sukurkite vieną korutiną su viena užduotimi
Sukurkite failą pavadinimu asinchroninis1.py ir pridėkite šį kodą. „asyncio“ biblioteka importuojama norint naudoti šios bibliotekos funkcijas. papildyti funkcija deklaruojama tam tikro skaičių diapazono sumai apskaičiuoti. Skaičių diapazoną nuo 1 iki 101 užduotis priskiria uždelsdama vieną sekundę. Skelbiama, kad įvykių ciklas tęsis, kol bus atliktos visos pagrindinio metodo užduotys. Apskaičiavus vertę, funkcija lauks vieną sekundę ir išspausdins rezultatą.
importuoti asyncioasync def add (pradžia, pabaiga, laukimas):
# Inicializuokite sumos kintamąjį
suma = 0
#Suskaičiuokite visų skaičių sumą
n diapazone (pradžia, pabaiga):
suma + = n
# Palaukite paskirtų sekundžių
laukti asyncio.miegoti (laukti)
# Atspausdinkite rezultatą
spausdinti (f'Suma nuo pradžios iki pabaigos yra suma ')
„async def main“ ():
# Priskirkite vieną užduotį
task = kilpa.sukurti_užduotis (pridėti (1 101,1))
# Vykdykite užduotį asinchroniškai
laukti asyncio.palauk ([task])
jei __pavadinimas = = '__main__':
#Deklaruoti įvykių ciklą
kilpa = asinchronija.get_event_loop ()
# Paleiskite kodą, kol atliksite visas užduotis
kilpa.run_until_complete (main ())
# Uždarykite kilpą
kilpa.Uždaryti()
Išvestis:
$ python3 async1.pyIšvestyje rodoma suma nuo 1 iki 101, kuri yra 5050.
2 pavyzdys: sukurkite kelis korutinus
Asyncio bibliotekos naudojimas bus išvalytas, kai vienu metu vykdysite kelis korutinus. Sukurkite naują failą pavadinimu asinchroninis2.py ir pridėkite šį kodą. Sukuriamos trys užduotys su trimis skirtingais intervalais ir laukimo reikšmėmis pagrindinis () metodas. Pirmoji užduotis apskaičiuos sumą nuo 5 iki 500000 laukdama 3 sekundes, antroji užduotis apskaičiuos sumą nuo 2 iki 300000 laukdama 2 sekundes, o trečioji užduotis apskaičiuos sumą nuo 10 iki 1000 laukdama 1 sekundę. Užduotis su mažomis laukimo reikšmėmis iš pradžių bus baigta, o užduotis su didele laukimo verte bus baigta pagaliau.
importuoti asyncioasync def add (pradžia, pabaiga, laukimas):
# Inicializuokite sumos kintamąjį
suma = 0
#Suskaičiuokite visų skaičių sumą
n diapazone (pradžia, pabaiga):
suma + = n
# Palaukite paskirtų sekundžių
laukti asyncio.miegoti (laukti)
# Atspausdinkite rezultatą
spausdinti (f'Suma nuo pradžios iki pabaigos yra suma ')
async def main ():
# Paskirkite pirmąją užduotį
task1 = kilpa.create_task (pridėti (5 500 000 3))
# Priskirkite antrą užduotį
task2 = kilpa.create_task (pridėti (2,300000,2))
# Priskirkite trečią užduotį
task3 = kilpa.sukurti_užduotis (pridėti (10,1000,1))
# Vykdykite užduotis asinchroniškai
laukti asyncio.laukti ([task1, task2, task3])
jei __pavadinimas = = '__main__':
#Deklaruoti įvykių ciklą
kilpa = asinchronija.get_event_loop ()
# Paleiskite kodą, kol atliksite visas užduotis
kilpa.run_until_complete (main ())
# Uždarykite kilpą
kilpa.Uždaryti()
Išvestis:
$ python3 async1.pyIšvestis rodo, kad užduotis3 įvykdyta pirmiausia, nes šios užduoties laukimo laikas buvo tik 1 sekundė, o užduotis1 baigta paskutinė, nes šios užduoties laukimo laikas buvo 3 sekundės.
3 pavyzdys: korutinai su ateitimi
Šis pavyzdys rodo būsimo „asyncio“ bibliotekos objekto naudojimą. Sukurkite naują failą pavadinimu asinchroninis3.py ir pridėkite šį kodą. Šiame pavyzdyje ateityje bus paskirtos dvi užduotys. show_message Funkcija yra deklaruota čia, norint atsispausdinti pranešimą prieš vykdant programą ir baigus vykdyti. Pirmoji užduotis laukia 2 sekundes ir bus atlikta paskutinė. Antroji užduotis palauks 1 sekundę ir bus atlikta pirmiausia.
importuoti asyncioasync def show_message (skaičius, palaukite):
#Spausdinti pranešimą
spausdinti („Užduotis numeris veikia“)
# Palaukite paskirtų sekundžių
laukti asyncio.miegoti (laukti)
spausdinti (f'Užduotis numeris baigta ')
async def stop_after (kada):
laukti asyncio.miegoti (kada)
kilpa.sustabdyti()
async def main ():
# Paskirkite pirmąją užduotį
task1 = asinchronas.užtikrinti_ ateitį (rodyti_pranešimą (1,2))
spausdinti ('1 priedas')
# Priskirkite antrą užduotį
task2 = asinchronas.užtikrinti_ ateitį (parodyti_pranešimą (2,1))
spausdinti ('2 priedas')
# Vykdykite užduotis asinchroniškai
laukti asyncio.palaukti ([task1, task2])
jei __pavadinimas = = '__main__':
#Deklaruoti įvykio kilpą
kilpa = asinchronija.get_event_loop ()
# Paleiskite pagrindinio metodo kodą, kol atliksite visas užduotis
kilpa.run_until_complete (main ())
Išvestis:
$ python3 async3.pyIšvestyje parodyta, kad užduotis1 pradedama pirmiausia ir baigiama paskutinė, o užduotis2 pradedama vėliau, bet pirmiausia įvykdoma trumpam laukimo laikui.
Išvada
Čia paaiškinta pagrindinė asinchroninio programavimo, naudojant python asinchroninę biblioteką, samprata. Tikimės, kad jūs galėsite parašyti daugialypį kodą „python“ sistemoje, išbandę šios pamokos pavyzdžius.