Middle
Wat is asynchrone programmeren (async)?
sobes.tech AI
Antwoord van AI
Asynchrone programmering is een paradigma die het mogelijk maakt om meerdere taken gelijktijdig uit te voeren zonder de hoofduitvoeringsstroom van het programma te blokkeren. Dit wordt bereikt door efficiënt gebruik te maken van wachttijden (bijvoorbeeld bij invoer/uitvoer-operaties).
Belangrijke concepten:
- Coroutines: Speciale functies die hun uitvoering kunnen onderbreken en later hervatten. Worden gedeclareerd met
async def. - Event Loop: De hoofdregisseur die de uitvoering van coroutines beheert, gebeurtenissen bewaakt en tussen taken schakelt wanneer een van hen wacht.
- await: Sleutelwoord om de uitvoering van een coroutine te onderbreken totdat de verwachte operatie is voltooid (bijvoorbeeld het aanroepen van een andere coroutine of wachten op een I/O-resultaat).
Voorbeeld:
// Voorbeeld van een asynchrone functie
import asyncio
async def fetch_url(url):
print(f"Begin laden: {url}")
await asyncio.sleep(2) // Simulatie van een lange operatie (bijvoorbeeld netwerkverzoek)
print(f"Laden voltooid: {url}")
async def main():
# Taken maken uit coroutines
task1 = asyncio.create_task(fetch_url("http://example.com/page1"))
task2 = asyncio.create_task(fetch_url("http://example.com/page2"))
# Wachten tot beide taken zijn voltooid
await task1
await task2
// Start de event loop
if __name__ == "__main__":
asyncio.run(main())
Voordelen:
- Verbeterde prestaties: Vooral voor I/O-gebonden taken (netwerkverzoeken, werken met bestanden).
- Beter gebruik van bronnen: Er worden geen meerdere threads of processen gemaakt, wat de overhead vermindert.
- Behoud van responsiviteit: De hoofdthread wordt niet geblokkeerd, wat belangrijk is voor interactieve applicaties of servers.
Asynchrone programmering is geschikt voor:
- Webservers (bijvoorbeeld met
asyncioofFastAPI). - Web scraping.
- Werken met databases.
- Elke taak die wacht op externe bronnen.