Python

Python Asyncio apmācība

Python Asyncio apmācība
Asyncio bibliotēka ir ieviesta Python 3.4, lai izpildītu viena pavediena vienlaicīgas programmas. Šī bibliotēka ir populāra nekā citas bibliotēkas un ietvarstruktūras ar iespaidīgu ātrumu un dažādu lietojumu. Šī bibliotēka tiek izmantota pitonā, lai izveidotu, izpildītu un strukturētu korutīnas un vienlaicīgi apstrādātu vairākus uzdevumus, neveicot uzdevumus paralēli. Galvenās šīs bibliotēkas daļas ir definētas tālāk:

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 asinhionu
async 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.py

Rezultā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 asinsiju
async 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.py

Rezultā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 asinhionu
async 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.py

Izvadā 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ā.

Izmantojot X-Mouse Button Control, atšķirīgi mainiet peles pogas atšķirīgai programmatūrai
Varbūt jums ir nepieciešams rīks, kas varētu mainīt peles vadību ar katru lietoto lietojumprogrammu. Ja tas tā ir, varat izmēģināt lietojumprogrammu a...
Microsoft Sculpt Touch bezvadu peles apskats
Es nesen lasīju par Microsoft Sculpt Touch bezvadu pele un nolēma to nopirkt. Pēc kāda laika izmantošanas es nolēmu dalīties savā pieredzē ar to. Šo b...
AppyMouse ekrāna skārienpaliktnis un peles rādītājs Windows planšetdatoriem
Planšetdatoru lietotājiem bieži pietrūkst peles rādītāja, it īpaši, ja viņi parasti lieto klēpjdatorus. Skārienekrāna viedtālruņiem un planšetdatoriem...