Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
modul:m323:learningunits:lu03:callbacks [2024/03/28 14:07] – angelegt - Externe Bearbeitung 127.0.0.1 | modul:m323:learningunits:lu03:callbacks [2024/09/11 09:27] (aktuell) – [Callbacks in der Asynchronen Programmierung] kmaurizi | ||
---|---|---|---|
Zeile 41: | Zeile 41: | ||
===== Callbacks in der Asynchronen Programmierung ===== | ===== Callbacks in der Asynchronen Programmierung ===== | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Wir werden das asynchrone Programmieren nicht vertiefen am BZZ. Dies dürfen Sie dann an der Fachhochschule 😉 | ||
+ | </ | ||
+ | |||
Asynchrone Programmierung ist ein Ansatz, bei dem Operationen ausgeführt werden können, ohne den Ablauf des gesamten Programms zu blockieren. Ein häufiges Szenario für asynchrone Aufrufe sind Netzwerkanfragen, | Asynchrone Programmierung ist ein Ansatz, bei dem Operationen ausgeführt werden können, ohne den Ablauf des gesamten Programms zu blockieren. Ein häufiges Szenario für asynchrone Aufrufe sind Netzwerkanfragen, | ||
Zeile 66: | Zeile 71: | ||
* **'' | * **'' | ||
- | === Beispiele === | ||
- | == Einfaches | + | === Beispiel: Parallele Ausführung von Aufgaben === |
- | + | Eine der Hauptvorteile | |
- | Ein einfaches Beispiel für die Verwendung | + | |
<code python> | <code python> | ||
import asyncio | import asyncio | ||
- | async def say_hello(): | + | async def task_1(): |
- | print(" | + | print('Task 1 gestartet' |
- | await asyncio.sleep(1) | + | await asyncio.sleep(2) |
- | print(" | + | print(' |
- | | + | |
+ | async def task_2(): | ||
+ | print('Task 2 gestartet' | ||
+ | | ||
+ | print(' | ||
+ | |||
+ | async def main(): | ||
+ | await asyncio.gather(task_1(), | ||
if __name__ == ' | if __name__ == ' | ||
- | asyncio.run(say_hello()) | + | asyncio.run(main()) |
</ | </ | ||
- | In diesem | + | === Beispiel: Asynchrone Dateioperation === |
- | == Beispiel | + | In diesem |
- | Dieses Beispiel ruft Daten von einer Dummy-API ab und verwendet '' | + | <code python> |
+ | import aiofiles | ||
+ | import asyncio | ||
+ | |||
+ | async def read_file(file_name): | ||
+ | async with aiofiles.open(file_name, | ||
+ | contents = await file.read() | ||
+ | print(f'Inhalt von {file_name}: | ||
+ | |||
+ | async def main(): | ||
+ | | ||
+ | read_file('file1.txt'), | ||
+ | read_file('file2.txt') | ||
+ | ) | ||
+ | |||
+ | if __name__ == '__main__': | ||
+ | asyncio.run(main()) | ||
+ | </ | ||
+ | |||
+ | === Beispiel: API-Call mit Zeitüberschreitung === | ||
+ | |||
+ | Ein häufiges Problem bei Netzwerkanfragen ist die Notwendigkeit, eine maximale Wartezeit festzulegen. Dies kann durch die Verwendung von Timeout-Parametern und asynchroner Programmierung gelöst werden. | ||
<code python> | <code python> | ||
Zeile 97: | Zeile 129: | ||
async def fetch_data(): | async def fetch_data(): | ||
async with httpx.AsyncClient() as client: | async with httpx.AsyncClient() as client: | ||
- | response = await client.get(' | + | |
- | | + | |
+ | | ||
+ | except httpx.RequestError as exc: | ||
+ | print(f' | ||
async def main(): | async def main(): | ||
- | | + | await fetch_data() |
- | | + | |
- | | + | |
if __name__ == ' | if __name__ == ' | ||
asyncio.run(main()) | asyncio.run(main()) | ||
+ | </ | ||
+ | === Beispiel: Daten von mehreren APIs gleichzeitig abrufen === | ||
+ | |||
+ | Hier zeigen wir, wie mehrere API-Aufrufe parallel ablaufen können, um die Effizienz zu verbessern. | ||
+ | |||
+ | <code python> | ||
+ | import httpx | ||
+ | import asyncio | ||
+ | |||
+ | |||
+ | async def fetch_data(url): | ||
+ | async with httpx.AsyncClient() as client: | ||
+ | response = await client.get(url) | ||
+ | return response.text | ||
+ | |||
+ | |||
+ | async def main(): | ||
+ | urls = [ | ||
+ | ' | ||
+ | ' | ||
+ | ] | ||
+ | results = await asyncio.gather(*(fetch_data(url) for url in urls)) | ||
+ | for result in results: | ||
+ | print(result) | ||
+ | |||
+ | |||
+ | if __name__ == ' | ||
+ | asyncio.run(main()) | ||
</ | </ | ||
+ | Diese Beispiele zeigen verschiedene nützliche Anwendungsfälle für die asynchrone Programmierung in Python. Besonders bei I/ | ||
- | ---- | ||
- | {{tag> | ||
- | [[https:// |