Asynchroniczne przetwarzanie w Pythonie
Ten artykuł wyjaśnia asynchroniczne przetwarzanie w Pythonie.
Możesz poznać przykłady kodu dotyczące podstawowego użycia async/await oraz modułu asyncio w Pythonie.
YouTube Video
Asynchroniczne przetwarzanie w Pythonie
Przetwarzanie asynchroniczne w Pythonie to mechanizm umożliwiający efektywne obsługiwanie czasochłonnych operacji wejścia/wyjścia, takich jak odczyt i zapis plików lub komunikacja sieciowa. W przetwarzaniu synchronicznym następna operacja czeka, aż poprzednia się zakończy, natomiast w przetwarzaniu asynchronicznym możesz wykonywać inne zadania w czasie oczekiwania. W Pythonie do realizacji przetwarzania asynchronicznego dostępny jest moduł asyncio. Tutaj wyjaśnimy jego podstawowe elementy i sposób ich użycia krok po kroku.
Podstawowa składnia
Sercem przetwarzania asynchronicznego są funkcje nazywane korutynami. Funkcje async definiują funkcje asynchroniczne, a await służy do oczekiwania na zadanie asynchroniczne wewnątrz tych funkcji.
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())- W powyższym kodzie funkcja
say_hellojest zdefiniowana jako zadanie asynchroniczne. Podczas oczekiwania przez 1 sekundę za pomocąsleep(), inne asynchroniczne zadania mogą być wykonywane.
Wykonywanie wielu zadań jednocześnie
Korzystając z funkcji gather modułu asyncio, możesz uruchomić wiele zadań jednocześnie.
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())- W tym przykładzie
task1itask2są wykonywane równolegle. W rezultacietask2kończy się jako pierwszy z dwóch zadań, ale całkowity czas wykonania odpowiada czasowi wykonania najdłuższego zadania.
Obsługa błędów
Obsługa błędów jest ważna nawet w przypadku asynchronicznego przetwarzania. Możesz przechwycić i obsłużyć błędy za pomocą standardowej składni try-except.
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())- Ten kod pokazuje, jak wyjątki występujące w funkcjach asynchronicznych mogą być przechwytywane za pomocą
try-excepti bezpiecznie obsługiwane. Wyjątek zfaulty_taskjest przechwytywany w funkcjimaini odpowiednio wyświetlany.
Podsumowanie
Przetwarzanie asynchroniczne w Pythonie wykorzystuje async / await oraz asyncio do równoczesnego wykonywania innych zadań podczas oczekiwania na operacje wejścia/wyjścia, co pozwala na efektywne przetwarzanie. Wykorzystując równoczesne wykonywanie wielu zadań oraz asynchroniczne operacje wejścia/wyjścia, możesz znacznie zwiększyć wydajność. Dodatkowo, dzięki temu że możesz obsługiwać błędy tak jak w zwykłym try-except, możesz bezpiecznie uruchamiać kod asynchroniczny.
Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.