Asynchrone verwerking in Python
Dit artikel legt uit hoe asynchrone verwerking in Python werkt.
Je kunt codevoorbeelden leren voor het basisgebruik van Python's async/await en de asyncio module.
YouTube Video
Asynchrone verwerking in Python
Asynchrone verwerking in Python is een mechanisme om efficiënt tijdrovende I/O-bewerkingen af te handelen, zoals het lezen en schrijven van bestanden of netwerkcommunicatie. Bij synchrone verwerking wacht de volgende bewerking totdat de huidige voltooid is, maar met asynchrone verwerking kun je tijdens het wachten doorgaan met andere taken. In Python is de module asyncio beschikbaar voor het uitvoeren van asynchrone verwerking. Hier leggen we de basiselementen ervan uit en hoe je ze stap voor stap gebruikt.
Basis Syntax
De kern van asynchrone verwerking wordt gevormd door functies die coroutines worden genoemd. async functies definiëren asynchrone functies, en await wordt gebruikt om te wachten op een asynchrone taak binnen die functies.
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())- In de bovenstaande code wordt de functie
say_hellogedefinieerd als een asynchrone taak. Tijdens het wachten van 1 seconde metsleep(), kunnen andere asynchrone taken worden uitgevoerd.
Meerdere taken uitvoeren
Door de functie gather van de module asyncio te gebruiken, kun je meerdere taken tegelijkertijd uitvoeren.
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())- In dit voorbeeld worden
task1entask2gelijktijdig uitgevoerd. Als resultaat istask2de eerste van de twee taken die voltooid wordt, maar de totale uitvoeringstijd is gelijk aan de uitvoeringstijd van de langste taak.
Foutenafhandeling
Foutafhandeling is belangrijk, zelfs bij asynchrone verwerking. Je kunt fouten opvangen en afhandelen met behulp van de standaard try-except syntax.
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())- Deze code laat zien hoe uitzonderingen die binnen asynchrone functies optreden kunnen worden opgevangen met
try-excepten hoe hun foutmeldingen veilig kunnen worden afgehandeld. De uitzondering vanfaulty_taskwordt binnenmainopgevangen en vervolgens correct weergegeven.
Samenvatting
Asynchrone verwerking in Python gebruikt async / await en asyncio om andere taken gelijktijdig uit te voeren tijdens het wachten op I/O, waardoor efficiënte verwerking mogelijk wordt. Door gelijktijdige uitvoering van meerdere taken en asynchrone I/O te benutten, kun je de prestaties aanzienlijk verbeteren. Bovendien kun je fouten afhandelen zoals bij een gewone try-except, waardoor je asynchrone code veilig kunt uitvoeren.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.