Asynkron behandling i Python

Asynkron behandling i Python

Den här artikeln förklarar asynkron behandling i Python.

Du kan lära dig kodexempel för grundläggande användning av Pythons async/await och asyncio-modulen.

YouTube Video

Asynkron behandling i Python

Asynkron bearbetning i Python är en mekanism för att effektivt hantera tidskrävande I/O-operationer, såsom filinläsning och -skrivning eller nätverkskommunikation. Vid synkron bearbetning väntar nästa operation tills den nuvarande är klar, men med asynkron bearbetning kan du fortsätta med andra uppgifter under väntetiden. I Python tillhandahålls modulen asyncio för att utföra asynkron bearbetning. Här kommer vi att förklara dess grundläggande element och hur du använder dem steg för steg.

Grundläggande syntax

I hjärtat av asynkron bearbetning finns funktioner som kallas korutiner. async-funktioner definierar asynkrona funktioner, och await används för att vänta på en asynkron uppgift inom dessa funktioner.

 1import asyncio
 2
 3async def say_hello():
 4    print("Hello")
 5    await asyncio.sleep(1)
 6    print("World")
 7
 8if __name__ == "__main__":
 9    # Execute asynchronous task
10    asyncio.run(say_hello())
  • I koden ovan definieras funktionen say_hello som en asynkron uppgift. Medan du väntar i 1 sekund med sleep(), kan andra asynkrona uppgifter köras.

Köra flera uppgifter

Genom att använda funktionen gather i modulen asyncio, kan du köra flera uppgifter samtidigt.

 1import asyncio
 2
 3async def task1():
 4    print("Task 1 started")
 5    await asyncio.sleep(2)
 6    print("Task 1 completed")
 7
 8async def task2():
 9    print("Task 2 started")
10    await asyncio.sleep(1)
11    print("Task 2 completed")
12
13async def main():
14    await asyncio.gather(task1(), task2())
15
16if __name__ == "__main__":
17    asyncio.run(main())
  • I detta exempel körs task1 och task2 parallellt. Som resultat blir task2 klar först av de två uppgifterna, men den totala exekveringstiden motsvarar den längsta uppgiftens exekveringstid.

Felhantering

Felfångst är viktigt även vid asynkron behandling. Du kan fånga och hantera fel med hjälp av den standardiserade try-except-syntaxen.

 1import asyncio
 2
 3async def faulty_task():
 4    raise Exception("An error occurred")
 5
 6async def main():
 7    try:
 8        await faulty_task()
 9    except Exception as e:
10        print(f"Caught an error: {e}")
11
12if __name__ == "__main__":
13    asyncio.run(main())
  • Den här koden visar hur undantag som uppstår i asynkrona funktioner kan fångas med try-except och deras felmeddelanden hanteras säkert. Undantaget från faulty_task fångas upp inuti main och hanteras på lämpligt sätt.

Sammanfattning

Asynkron bearbetning i Python använder async / await och asyncio för att köra andra uppgifter samtidigt som I/O väntas på, vilket möjliggör effektiv bearbetning. Genom att utnyttja samtidig körning av flera uppgifter och asynkron I/O kan du kraftigt förbättra prestandan. Dessutom, eftersom du kan hantera fel precis som med vanlig try-except, kan du köra asynkron kod på ett säkert sätt.

Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.

YouTube Video