Koreutina: Del kode, ki ga je mogoče zaustaviti in nadaljevati v večnitnem skriptu, se imenuje koroutina. podprogrami sodelujejo v večnitnem programu. Ko se ena podprogram ustavi, se lahko izvede druga podprogram.
Zanka dogodka: Uporablja se za začetek izvajanja podprogramov in obdelavo vhodno / izhodnih operacij. Potrebno je več nalog in jih dokončajte.
Naloga: Izvedba in rezultat podprogramov so opredeljeni v nalogah. Z knjižnico asyncio lahko dodelite več število nalog in jih asinhrono zaženete.
Prihodnost: Deluje kot prihodnje skladišče, kamor se bodo po koncu shranjevali rezultati podprogramov. To je koristno, kadar katera koli podprogram zahteva, da počaka na rezultat druge podprograme.
Kako lahko uporabite zgornje koncepte knjižnice asyncio, je prikazano v tej vadnici z nekaj preprostimi primeri.
Primer-1: Ustvarite posamezno podprogram z eno samo nalogo
Ustvarite datoteko z imenom async1.py in dodajte naslednjo kodo. knjižnica asyncio je uvožena za uporabo funkcij te knjižnice. dodajte funkcija je določena za izračun vsote določenega obsega števil. Obseg številk od 1 do 101 opravilo dodeli z eno sekundo zakasnitve. Zanka dogodkov je razglašena, da se bo izvajala, dokler ne bodo končane vse naloge glavne metode. Po izračunu vrednosti bo funkcija počakala eno sekundo in natisnila rezultat.
uvoz asyncioasync def add (začetek, konec, čakanje):
#Initializirajte spremenljivko vsote
vsota = 0
# Izračunaj vsoto vseh števil
za n v območju (začetek, konec):
vsota + = n
# Počakajte določene sekunde
čakam asyncio.spi (počakaj)
# Natisnite rezultat
print (f'Sum od start do end je sum ')
async def main ():
# Dodelite eno nalogo
naloga = zanka.create_task (dodaj (1.101,1))
# Nalogo zaženite asinhrono
čakam asyncio.počakaj ([naloga])
če je __name__ == '__main__':
#Declare zanka dogodka
zanka = asyncio.get_event_loop ()
# Zaženite kodo, dokler ne dokončate vse naloge
zanko.run_until_complete (main ())
#Zaprite zanko
zanko.zapri ()
Izhod:
$ python3 async1.pyRezultat prikazuje vsoto od 1 do 101, kar je 5050.
Primer-2: Ustvarite več podprogramov
Uporaba asyncio knjižnice bo odstranjena, ko boste hkrati izvajali več korogutin. Ustvarite novo datoteko z imenom async2.py in dodajte naslednjo kodo. Ustvarijo se tri naloge s tremi različnimi obsegi in čakalnimi vrednostmi v glavni () metoda. Prva naloga bo izračunala vsoto od 5 do 500000 s čakanjem 3 sekunde, druga naloga bo izračunala vsoto od 2 do 300000 s čakanjem 2 sekundi in tretja naloga bo izračunala vsoto od 10 do 1000 s čakanjem 1 sekundo. Naloga z nizkimi čakalnimi vrednostmi bo končana najprej, naloga z visoko čakalno vrednostjo pa končno.
uvoz asyncioasync def add (začetek, konec, čakanje):
#Initializirajte spremenljivko vsote
vsota = 0
# Izračunaj vsoto vseh števil
za n v območju (začetek, konec):
vsota + = n
# Počakajte določene sekunde
čakam asyncio.spi (počakaj)
# Natisnite rezultat
print (f'Sum od start do end je sum ')
async def main ():
# Dodeli prvo nalogo
task1 = zanka.create_task (dodaj (5,500000,3))
# Dodeli drugo nalogo
task2 = zanka.create_task (dodaj (2.300.000,2))
# Dodeli tretjo nalogo
task3 = zanka.create_task (dodaj (10,1000,1))
# Naloge zaženite asinhrono
čakam asyncio.počakajte ([naloga1, naloga2, naloga3])
če je __name__ == '__main__':
#Declare zanka dogodka
zanka = asyncio.get_event_loop ()
# Zaženite kodo, dokler ne dokončate vse naloge
zanko.run_until_complete (main ())
#Zaprite zanko
zanko.zapri ()
Izhod:
$ python3 async1.pyIzhod kaže, da je naloga3 najprej končana, ker je bila čakalna doba te naloge samo 1 sekunda, naloga1 pa končana zadnja, ker je bila čakalna doba te naloge 3 sekunde.
Primer-3: podprogrami s prihodnostjo
Ta primer prikazuje uporabo prihodnjega predmeta knjižnice asyncio. Ustvarite novo datoteko z imenom async3.py in dodajte naslednjo kodo. V tem primeru sta za prihodnost dodeljeni dve nalogi. show_message Tu je razglašena funkcija za tiskanje sporočila pred izvajanjem podprograma in po zaključku izvedbe. Prva naloga bo počakala 2 sekundi, končala pa se bo zadnja. Druga naloga bo počakala 1 sekundo in bo končana prva.
uvoz asyncioasync def show_message (število, čakanje):
# Natisnite sporočilo
tiskanje (f'Task številka se izvaja ')
# Počakajte določene sekunde
čakam asyncio.spi (počakaj)
natisni (f'Naloga številka je končana ')
async def stop_after (kdaj):
čakam asyncio.spanje (kdaj)
zanko.stop ()
async def main ():
# Dodeli prvo nalogo
task1 = asyncio.zagotoviti_future (show_message (1,2))
natisni ('Razpored 1')
# Dodeli drugo nalogo
task2 = asyncio.zagotoviti_prihodnost (show_message (2,1))
natisni ('Razpored 2')
# Naloge zaženite asinhrono
čakam asyncio.počakajte ([naloga1, naloga2])
če je __name__ == '__main__':
#Declare zanka dogodka
zanka = asyncio.get_event_loop ()
# Zaženite kodo glavne metode, dokler ne dokončate vse naloge
zanko.run_until_complete (main ())
Izhod:
$ python3 async3.pyV izhodnih podatkih je prikazano, da se naloga1 najprej zažene in konča zadnja, naloga2 pa se zažene pozneje, vendar dokončana najprej za kratek čas.
Zaključek
Tukaj je razložen osnovni koncept asinhronega programiranja z uporabo asyncio knjižnice pythona. Upam, da boste lahko po vadbi primerov te vadnice v python napisali večnitno kodo.