Python

Python Asyncio-zelfstudie

Python Asyncio-zelfstudie
Asyncio-bibliotheek wordt geïntroduceerd in python 3.4 om gelijktijdige programma's met één thread uit te voeren. Deze bibliotheek is populairder dan andere bibliotheken en frameworks vanwege zijn indrukwekkende snelheid en veelzijdig gebruik. Deze bibliotheek wordt in Python gebruikt om coroutines te maken, uit te voeren en te structureren en om meerdere taken tegelijkertijd uit te voeren zonder de taken parallel uit te voeren. De belangrijkste onderdelen van deze bibliotheek worden hieronder gedefinieerd:

Coroutine: Het deel van de code dat kan worden gepauzeerd en hervat in multi-threaded script wordt coroutine genoemd. coroutines werken samen in een multi-threaded programma. Wanneer een coroutine pauzeert, kan de andere coroutine uitvoeren.

Evenementenlus: Het wordt gebruikt om de uitvoering van coroutines te starten en invoer-/uitvoerbewerkingen af ​​te handelen. Er zijn meerdere taken nodig en voltooi ze.

Taak: De uitvoering en het resultaat van coroutines worden bepaald door de taken. U kunt meerdere taken toewijzen met behulp van een asynchrone bibliotheek en de taken asynchroon uitvoeren run.

Toekomst: Het fungeert als een toekomstige opslag waar het resultaat van coroutines na voltooiing wordt opgeslagen. Dit is handig wanneer een coroutine moet wachten op het resultaat van andere coroutine.

Hoe u de bovenstaande concepten van asyncio-bibliotheek kunt implementeren, wordt in deze zelfstudie getoond aan de hand van enkele eenvoudige voorbeelden.

Voorbeeld-1: Maak een enkele coroutine met een enkele taak

Maak een bestand met de naam async1.py en voeg de volgende code toe:. asyncio-bibliotheek wordt geïmporteerd om de functies van deze bibliotheek te gebruiken. toevoegen functie wordt gedeclareerd om de som van een bepaald bereik van getallen te berekenen. Het nummerbereik van 1 tot 101 wordt toegewezen door de taak met een vertraging van één seconde. De gebeurtenislus wordt verklaard dat deze wordt uitgevoerd totdat alle taken van de hoofdmethode zijn voltooid. Na het berekenen van de waarde wacht de functie één seconde en drukt het resultaat af.

asynchrone importeren
async def add(start,end,wait):
#Initialiseer somvariabele
som = 0
#Bereken de som van alle getallen
voor n in bereik (begin, einde):
som += n
#Wacht op toegewezen seconden
wachten asyncio.slapen (wacht)
#Print het resultaat
print(f'Sum van start tot end is sum')
asynchrone def main():
#Een enkele taak toewijzen
taak = lus.create_task(add(1,101,1))
#Voer de taak asynchroon uit
wachten asyncio.wacht ([taak])
if __name__ == '__main__':
#Declare event loop
lus = asynchrone.get_event_loop()
#Voer de code uit tot het voltooien van alle taken
lus.run_until_complete(main())
#Sluit de cirkel
lus.dichtbij()

Uitgang:

$ python3 async1.py

De uitvoer toont de som van 1 tot 101, wat 5050 . is.

Voorbeeld-2: Meerdere coroutines maken

Het gebruik van de asyncio-bibliotheek wordt gewist wanneer u meerdere coroutines tegelijkertijd uitvoert. Maak een nieuw bestand met de naam async2.py en voeg de volgende code toe:. Er worden drie taken gegenereerd met drie verschillende bereiken en wachtwaarden in hoofd() methode. De eerste taak berekent de som van 5 tot 500000 door 3 seconden te wachten, de tweede taak berekent de som van 2 tot 300000 door 2 seconden te wachten en de derde taak berekent de som van 10 tot 1000 door 1 seconden te wachten. De taak met een lage wachtwaarde wordt eerst voltooid en de taak met een hoge wachtwaarde wordt uiteindelijk voltooid.

asynchrone importeren
async def add(start,end,wait):
#Initialiseer somvariabele
som = 0
#Bereken de som van alle getallen
voor n in bereik (begin, einde):
som += n
#Wacht op toegewezen seconden
wachten asyncio.slapen (wacht)
#Print het resultaat
print(f'Sum van start tot end is sum')
asynchrone def main():
#Toewijzen eerste taak
taak1=lus.create_task(add(5,50000,3))
#Tweede taak toewijzen
taak2=lus.create_task(add(2,300000,2))
#Derde taak toewijzen
taak3=lus.create_task(add(10,1000,1))
#Voer de taken asynchroon uit
wachten asyncio.wacht([taak1,taak2,taak3])
if __name__ == '__main__':
#Declare event loop
lus = asynchrone.get_event_loop()
#Voer de code uit tot het voltooien van alle taken
lus.run_until_complete(main())
#Sluit de cirkel
lus.dichtbij()

Uitgang:

$ python3 async1.py

De output laat zien dat taak3 als eerste is voltooid omdat de wachttijd van deze taak slechts 1 seconde was en taak1 als laatste is voltooid omdat de wachttijd van deze taak 3 seconden was.

Voorbeeld-3: coroutines met toekomst

Dit voorbeeld toont het gebruik van toekomstig object van asyncio-bibliotheek. Maak een nieuw bestand met de naam async3.py en voeg de volgende code toe:. In dit voorbeeld zijn twee taken toegewezen voor de toekomst. toon bericht functie wordt hier gedeclareerd om het bericht af te drukken voordat de coroutine wordt uitgevoerd en na het voltooien van de uitvoering. De eerste taak wacht 2 seconden en wordt als laatste voltooid. De tweede taak wacht 1 seconde en wordt als eerste voltooid.

asynchrone importeren
async def show_message (nummer, wacht):
#Print het bericht
print(f'Taak nummer loopt')
#Wacht op toegewezen seconden
wachten asyncio.slapen (wacht)
print(f'Taak nummer is voltooid')
async def stop_after (wanneer):
wachten asyncio.slapen (wanneer)
lus.hou op()
asynchrone def main():
#Toewijzen eerste taak
taak1=asyncio.zorgen_toekomst(show_message(1,2))
print('Schema 1')
#Tweede taak toewijzen
taak2=asynchroon.zorgen_toekomst(show_message(2,1))
print('Schema 2')
#Voer de taken asynchroon uit
wachten asyncio.wacht([taak1,taak2])
if __name__ == '__main__':
#Declare event loop
lus = asynchrone.get_event_loop()
#Voer de code van de hoofdmethode uit totdat u alle taken hebt voltooid
lus.run_until_complete(main())

Uitgang:

$ python3 async3.py

In de uitvoer wordt weergegeven dat taak1 als eerste is gestart en als laatste is voltooid, en taak2 later wordt gestart maar eerst wordt voltooid voor een korte wachttijd.

Conclusie

Het basisconcept van asynchrone programmering met behulp van asyncio-bibliotheek van python wordt hier uitgelegd:. Hoop, je zult in staat zijn om multi-threaded code in python te schrijven na het oefenen van de voorbeelden van deze tutorial.

Wijs uw muisknoppen anders toe voor verschillende software met X-Mouse Button Control
Misschien heeft u een tool nodig waarmee u de bediening van uw muis kunt veranderen bij elke applicatie die u gebruikt. Als dit het geval is, kunt u e...
Microsoft Sculpt Touch draadloze muis Review
Ik las onlangs over de Microsoft Sculpt Touch draadloze muis en besloot hem te kopen. Nadat ik het een tijdje had gebruikt, besloot ik mijn ervaring e...
AppyMouse trackpad en muisaanwijzer op het scherm voor Windows-tablets
Tabletgebruikers missen vaak de muisaanwijzer, vooral wanneer ze gewend zijn om de laptop te gebruiken. Het touchscreen Smartphones en tablets hebben ...