Korutīna: To koda daļu, kuru var pārtraukt un atsākt ar vairāku pavedienu skriptu, sauc par korutīnu. korutīnas sadarbojas vairāku pavedienu programmā. Kad viena korutīna darbība tiek pārtraukta, citu korutīnu var izpildīt.
Notikumu cikls: To izmanto, lai sāktu korutīnu izpildi un apstrādātu ievades / izvades darbības. Tas prasa vairākus uzdevumus un tos izpilda.
Uzdevums: Korutīnu izpildi un rezultātu nosaka uzdevumi. Izmantojot asyncio bibliotēku, varat piešķirt vairākus uzdevumus un palaist uzdevumus asinhroni.
Nākotne: Tas darbojas kā nākotnes krātuve, kurā korutīnu rezultāts tiks uzglabāts pēc pabeigšanas. Tas ir noderīgi, ja jebkurai korutīnai ir jāgaida citas korutīnas rezultāts.
Kā jūs varat ieviest iepriekš minētos asyncio bibliotēkas jēdzienus, ir parādīts šajā apmācībā, izmantojot dažus vienkāršus piemērus.
1. piemērs: izveidojiet atsevišķu korutīnu ar vienu uzdevumu
Izveidojiet failu ar nosaukumu asinhronais1.py un pievienojiet šādu kodu. asyncio bibliotēka tiek importēta, lai izmantotu šīs bibliotēkas funkcijas. pievienot funkcija tiek deklarēta, lai aprēķinātu noteikta skaitļu diapazona summu. Skaitļu diapazonu no 1 līdz 101 uzdevums piešķir ar vienas sekundes kavēšanos. Notikuma cilpa ir deklarēta, ka tā darbosies, līdz visi galvenās metodes uzdevumi būs izpildīti. Pēc vērtības aprēķināšanas funkcija gaidīs vienu sekundi un izdrukās rezultātu.
importēt asinhionuasync def add (sākums, beigas, gaidīšana):
# Inicializēt summas mainīgo
summa = 0
# Aprēķiniet visu skaitļu summu
n diapazonā (sākums, beigas):
summa + = n
# Pagaidiet piešķirtās sekundes
gaidi asincio.gulēt (gaidīt)
#Izdrukājiet rezultātu
drukāt (f'Sum no sākuma līdz end ir summa ')
async def main ():
# Piešķirt vienu uzdevumu
uzdevums = cilpa.create_task (pievienot (1,101,1))
# Palaidiet uzdevumu asinhroni
gaidi asincio.pagaidi ([uzdevums])
ja __nosaukums == '__main__':
#Declare event loop
cilpa = asinhiozija.get_event_loop ()
# Palaidiet kodu, līdz esat pabeidzis visu uzdevumu
cilpa.run_until_complete (main ())
# Aizveriet cilpu
cilpa.aizvērt ()
Izeja:
$ python3 async1.pyRezultātā tiek parādīta summa no 1 līdz 101, kas ir 5050.
2. piemērs: izveidojiet vairākas korutīnas
Asyncio bibliotēkas izmantošana tiks notīrīta, kad vienlaikus darbināsiet vairākus korutīnus. Izveidojiet jaunu failu ar nosaukumu async2.py un pievienojiet šādu kodu. Tiek ģenerēti trīs uzdevumi ar trim dažādiem diapazoniem un gaidīšanas vērtībām galvenais () metodi. Pirmais uzdevums aprēķinās summu no 5 līdz 500000, gaidot 3 sekundes, otrais uzdevums aprēķinās summu no 2 līdz 300000, gaidot 2 sekundes, un trešais uzdevums aprēķinās summu no 10 līdz 1000, gaidot 1 sekundi. Sākumā tiks izpildīts uzdevums ar zemām gaidīšanas vērtībām, un beidzot tiks izpildīts uzdevums ar augstu gaidīšanas vērtību.
importēt asinsijuasync def add (sākums, beigas, gaidīšana):
# Inicializēt summas mainīgo
summa = 0
# Aprēķiniet visu skaitļu summu
n diapazonā (sākums, beigas):
summa + = n
# Pagaidiet piešķirtās sekundes
gaidi asyncio.gulēt (gaidīt)
#Izdrukājiet rezultātu
drukāt (f'Sum no sākuma līdz end ir summa ')
async def main ():
# Piešķirt pirmo uzdevumu
task1 = cilpa.izveidot_uzdevumu (pievienot (5 500 000 3))
# Piešķirt otro uzdevumu
task2 = cilpa.create_task (pievienot (2,300000,2))
# Piešķirt trešo uzdevumu
task3 = cilpa.izveidot_uzdevumu (pievienot (10,1000,1))
# Palaidiet uzdevumus asinhroni
gaidi asyncio.pagaidiet ([task1, task2, task3])
ja __nosaukums == '__main__':
#Declare event loop
cilpa = asinhiozija.get_event_loop ()
# Palaidiet kodu, līdz esat pabeidzis visu uzdevumu
cilpa.run_until_complete (main ())
# Aizveriet cilpu
cilpa.aizvērt ()
Izeja:
$ python3 async1.pyRezultāts parāda, ka uzdevums3 ir pabeigts vispirms, jo šī uzdevuma gaidīšanas laiks bija tikai 1 sekunde, bet uzdevums1 tiek izpildīts pēdējais, jo šī uzdevuma gaidīšanas laiks bija 3 sekundes.
3. piemērs: korutīnas ar nākotni
Šis piemērs parāda nākotnes objekta asyncio bibliotēkas izmantošanu. Izveidojiet jaunu failu ar nosaukumu asinhrona3.py un pievienojiet šādu kodu. Šajā piemērā nākotnei tiek piešķirti divi uzdevumi. show_message Šeit tiek deklarēta funkcija, lai drukātu ziņojumu pirms korutīnas izpildes un pēc izpildes pabeigšanas. Pirmais uzdevums gaidīs 2 sekundes un tiks izpildīts pēdējais. Otrais uzdevums gaidīs 1 sekundi un vispirms tiks izpildīts.
importēt asinhionuasync def show_message (numurs, pagaidiet):
#Izdrukājiet ziņojumu
drukāt (f 'Uzdevums numurs darbojas')
# Pagaidiet piešķirtās sekundes
gaidi asyncio.gulēt (gaidīt)
drukāt (f 'Uzdevums numurs ir pabeigts')
async def stop_after (kad):
gaidi asyncio.gulēt (kad)
cilpa.apstāties ()
async def main ():
# Piešķirt pirmo uzdevumu
task1 = asinsija.nodrošināt_nākotni (rādīt_ziņu (1,2))
drukāt ('1. grafiks')
# Piešķirt otro uzdevumu
task2 = asinsija.nodrošināt_nākotni (rādīt_ziņu (2,1))
drukāt ('2. grafiks')
# Palaidiet uzdevumus asinhroni
gaidi asincio.pagaidiet ([uzdevums1, uzdevums2])
ja __nosaukums == '__main__':
#Declare event loop
cilpa = asinhiozija.get_event_loop ()
# Palaidiet galvenās metodes kodu, līdz esat pabeidzis visu uzdevumu
cilpa.run_until_complete (main ())
Izeja:
$ python3 async3.pyIzvadā tiek parādīts, ka uzdevums1 tiek sākts pirmais un pabeigts pēdējais, un uzdevums2 tiek sākts vēlāk, bet vispirms tiek izpildīts īsam gaidīšanas laikam.
Secinājums
Asinhronās programmēšanas pamatkoncepcija, izmantojot pitona asinhrono bibliotēku, ir izskaidrota šeit. Ceru, ka pēc tam, kad būsit praktizējis šīs apmācības piemērus, varēsiet daudzveidu kodu uzrakstīt pitonā.