Asynchroniczne przetwarzanie w Pythonie

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_hello jest 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 task1 i task2 są wykonywane równolegle. W rezultacie task2 koń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-except i bezpiecznie obsługiwane. Wyjątek z faulty_task jest przechwytywany w funkcji main i 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.

YouTube Video