Asynkron behandling i Python

Asynkron behandling i Python

Denne artikel forklarer asynkron behandling i Python.

Du kan lære kodeeksempler for grundlæggende brug af Pythons async/await og asyncio modulet.

YouTube Video

Asynkron behandling i Python

Asynkron behandling i Python er en mekanisme til effektivt at håndtere tidskrævende I/O-operationer, såsom læsning og skrivning af filer eller netværkskommunikation. Ved synkron behandling venter den næste operation, indtil den nuværende er færdig, men med asynkron behandling kan du fortsætte med andre opgaver i ventetiden. I Python tilbydes modulet asyncio til at udføre asynkron behandling. Her vil vi forklare de grundlæggende elementer og hvordan man bruger dem trin for trin.

Grundlæggende syntaks

Kernen i asynkron behandling er funktioner kaldet coroutines (korrutiner). async funktioner definerer asynkrone funktioner, og await bruges til at vente på en asynkron opgave inden for disse 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 ovenstående kode er say_hello funktionen defineret som en asynkron opgave. Mens du venter i 1 sekund med sleep(), kan andre asynkrone opgaver blive udført.

Udførelse af flere opgaver

Ved at bruge gather-funktionen i asyncio-modulet kan du køre flere opgaver 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 dette eksempel udføres task1 og task2 samtidigt. Som resultat afsluttes task2 først af de to opgaver, men den samlede udførelsestid svarer til den længste opgaves udførelsestid.

Fejlhåndtering

Fejlhåndtering er vigtig, selv i asynkron behandling. Du kan fange og håndtere fejl ved hjælp af standard try-except syntaksen.

 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())
  • Denne kode viser, hvordan undtagelser opstået i asynkrone funktioner kan fanges med try-except, og deres fejlmeddelelser kan håndteres sikkert. Undtagelsen fra faulty_task fanges i main og udskrives passende.

Sammendrag

Asynkron behandling i Python bruger async / await og asyncio til at udføre andre opgaver samtidigt, mens der ventes på I/O, hvilket muliggør effektiv behandling. Ved at udnytte samtidig udførelse af flere opgaver og asynkron I/O kan du forbedre ydeevnen væsentligt. Derudover kan du håndtere fejl på samme måde som med almindelig try-except, så du sikkert kan køre asynkron kode.

Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.

YouTube Video