Rutina: Časť kódu, ktorú je možné pozastaviť a obnoviť v skripte s viacerými vláknami, sa nazýva coroutine. korutíny spolupracujú vo viacvláknovom programe. Keď sa jeden program zastaví, potom sa môže vykonať druhý program.
Slučka udalosti: Používa sa na spustenie vykonávania korutín a na spracovanie vstupno-výstupných operácií. Trvá to viac úloh a splníte ich.
Úloha: Vykonanie a výsledok korutín sú definované úlohami. Pomocou knižnice asyncio môžete priradiť viac úloh a úlohy môžete spúšťať asynchrónne.
Budúcnosť: Funguje ako budúce úložisko, kde sa po dokončení budú ukladať výsledky korutín. Je to užitočné, keď ktorýkoľvek korutín vyžaduje počkať na výsledok iného korutínu.
Ako môžete implementovať vyššie uvedené koncepty knižnice asyncio, je v tomto výučbe ukázané na niekoľkých jednoduchých príkladoch.
Príklad-1: Vytvorte jeden korutín s jedinou úlohou
Vytvorte súbor s názvom async1.py a pridajte nasledujúci kód. knižnica asyncio sa importuje, aby mohla využívať funkcie tejto knižnice. pridať funkcia je deklarovaná na výpočet súčtu určitého rozsahu čísel. Rozsah čísel od 1 do 101 je úlohe pridelený s oneskorením jednej sekundy. Smyčka udalostí je deklarovaná tak, že bude prebiehať, kým nebudú splnené všetky úlohy hlavnej metódy. Po výpočte hodnoty bude funkcia čakať jednu sekundu a vytlačí výsledok.
importovať asyncioasync def add (štart, koniec, čakanie):
# Inicializovať premennú súčet
súčet = 0
#Vypočítajte súčet všetkých čísel
pre n v rozsahu (začiatok, koniec):
suma + = n
# Počkajte pridelené sekundy
čakať asyncio.spať (čakať)
#Vytlačte výsledok
print (f'Sum od start do end je sum ')
async def main ():
# Priraďte jednu úlohu
úloha = slučka.create_task (add (1,101,1))
# Spustite úlohu asynchrónne
čakať asyncio.počkaj ([úloha])
ak __name__ == '__main__':
# Deklarovať slučku udalostí
slučka = asyncio.get_event_loop ()
# Spustite kód, kým nedokončíte všetky úlohy
slučka.run_until_complete (main ())
# Zatvorte slučku
slučka.Zavrieť()
Výkon:
$ python3 async1.pyNa výstupe je súčet 1 až 101, čo je 5050.
Príklad 2: Vytvorenie viacerých korutín
Používanie knižnice asyncio sa vymaže, keď budete súčasne spúšťať viac korún. Vytvorte nový súbor s názvom async2.py a pridajte nasledujúci kód. Vygenerujú sa tri úlohy s tromi rôznymi rozsahmi a čakajúcimi hodnotami v hlavný() metóda. Prvá úloha vypočíta súčet od 5 do 500000 počkaním 3 sekúnd, druhá úloha vypočíta súčet od 2 do 300000 čakaním 2 sekundy a tretia úloha spočíta súčet od 10 do 1000 čakaním 1 sekundu. Úloha s nízkymi čakajúcimi hodnotami sa najskôr dokončí a úloha s vysokou čakajúcou hodnotou sa dokončí nakoniec.
importovať asyncioasync def add (štart, koniec, čakanie):
# Inicializovať premennú súčet
súčet = 0
#Vypočítajte súčet všetkých čísel
pre n v rozsahu (začiatok, koniec):
suma + = n
# Počkajte pridelené sekundy
čakať asyncio.spať (čakať)
#Vytlačte výsledok
print (f'Sum od start do end je sum ')
async def main ():
# Priradiť prvú úlohu
task1 = slučka.create_task (pridať (5 500 000,3))
# Priraďte druhú úlohu
task2 = slučka.create_task (pridať (2 300 000,2))
# Priraďte tretiu úlohu
task3 = slučka.create_task (add (10,1000,1))
#Synchronne spustite úlohy
čakať asyncio.čakať ([task1, task2, task3])
ak __name__ == '__main__':
# Deklarovať slučku udalostí
slučka = asyncio.get_event_loop ()
# Spustite kód, kým nedokončíte všetky úlohy
slučka.run_until_complete (main ())
# Zatvorte slučku
slučka.Zavrieť()
Výkon:
$ python3 async1.pyVýstup ukazuje, že úloha3 je dokončená ako prvá, pretože čakacia doba tejto úlohy bola iba 1 sekunda a úloha1 je dokončená ako posledná, pretože čakacia doba tejto úlohy bola 3 sekundy.
Príklad 3: korutíny s budúcnosťou
Tento príklad ukazuje použitie budúceho objektu asyncio knižnice. Vytvorte nový súbor s názvom async3.py a pridajte nasledujúci kód. V tomto príklade sú pre budúcnosť priradené dve úlohy. show_message je tu deklarovaná funkcia na vytlačenie správy pred vykonaním korutínu a po dokončení vykonania. Prvá úloha počká na 2 sekundy a bude dokončená posledná. Druhá úloha počká 1 sekundu a najskôr sa dokončí.
importovať asyncioasync def show_message (číslo, počkajte):
# Vytlačte správu
print (f'Task number is running ')
# Počkajte pridelené sekundy
čakať asyncio.spať (čakať)
print (f'Task number is Complete ')
async def stop_after (keď):
čakať asyncio.spánok (kedy)
slučka.stop ()
async def main ():
# Priradiť prvú úlohu
task1 = asyncio.zabezpečiť_futúra (show_message (1,2))
tlač („Príloha 1“)
# Priraďte druhú úlohu
task2 = asyncio.zabezpečiť_futúra (show_message (2,1))
tlač („Príloha 2“)
#Synchronne spustite úlohy
čakať asyncio.čakať ([task1, task2])
ak __name__ == '__main__':
# Deklarovať slučku udalostí
slučka = asyncio.get_event_loop ()
# Spustite kód hlavnej metódy, kým nedokončíte všetky úlohy
slučka.run_until_complete (main ())
Výkon:
$ python3 async3.pyNa výstupe sa zobrazuje, že úloha1 je spustená ako prvá a je dokončená ako posledná a úloha2 je spustená neskôr, ale je dokončená ako prvá pre krátku čakaciu dobu.
Záver
Tu je vysvetlený základný koncept asynchrónneho programovania pomocou asyncio knižnice pythonu. Dúfam, že po precvičení príkladov tohto tutoriálu budete môcť v Pythone písať viacvláknový kód.