Wprowadzenie do asyncio
asyncio to wysoko wydajny moduł w Pythonie, zaprojektowany do obsługi pracy asynchronicznej poprzez używanie tzw. pętli zdarzeń. Pętla zdarzeń zarządza planowaniem i wykonywaniem asynchronicznych zadań, pozwalając na wykonywanie ich bez blokowania głównego wątku programu.
Zobacz też
Na blogu mamy też kilka innych artykułów, które mogą Cię zainteresować:
- Integracja generatorów z asynchronicznym programowaniem w Pythonie
- Dekoratory w Pythonie - jak i kiedy ich używać
- Debugowanie i testowanie generatorów w Pythonie
Podstawowe pojęcia asyncio:
-
Coroutine (korutyna): Asynchroniczna funkcja w Pythonie oznaczona słowem kluczowym
async. Korutyny pozwalają na używanie instrukcjiawaitw celu asynchronicznego wywoływania funkcji i oczekiwania na ich zakończenie. -
Event Loop (pętla zdarzeń): Mechanizm, który zarządza asynchronicznymi zadaniami i ich kolejnością wykonania.
Pisanie korutyn z asyncio
Aby stworzyć korutynę w Pythonie, używamy słowa kluczowego async def. Oto prosty przykład korutyny, która oczekuje przez określoną ilość sekund, zanim wyświetli komunikat:
Python1 2 3 4 5 6import asyncio async def hello_world(): print("Hello") await asyncio.sleep(1) print("World")
W powyższym przykładzie asyncio.sleep(1) jest używane zamiast tradycyjnego time.sleep(1), aby umożliwić pętli zdarzeń wykonywanie innych operacji podczas oczekiwania.
Uruchamianie pętli zdarzeń
Aby uruchomić pętlę zdarzeń i wykonywać korutyny, używamy funkcji asyncio.run(). Oto jak uruchomić naszą przykładową korutynę:
Python1asyncio.run(hello_world())
Tworzenie bardziej skomplikowanych zadań
W asyncio możemy uruchamiać wiele korutyn równocześnie. W tym celu używamy funkcji takich jak asyncio.gather() do wykonywania zadań równolegle:
Python1 2 3 4 5 6 7 8 9 10 11 12 13import asyncio async def task(name, delay): await asyncio.sleep(delay) print(f"Task {name} completed after {delay} seconds") async def main(): await asyncio.gather( task("A", 2), task("B", 1) ) asyncio.run(main())
W powyższym przykładzie uruchamiamy dwie korutyny jednocześnie, każda z innym czasem oczekiwania. Dzięki asyncio.gather(), oba zadania są zarządzane przez pętlę zdarzeń i zakończą się, gdy wszystkie z nich są gotowe.
Korzyści z użycia asynchroniczności
Asynchroniczność jest szczególnie przydatna w aplikacjach, które muszą obsługiwać wiele żądań jednocześnie, na przykład serwisy internetowe, aplikacje sieciowe czy programy komunikacyjne. Dzięki zmniejszeniu blokad i zwiększonej responsywności, takie aplikacje mogą działać płynniej i bardziej efektywnie.
Zakończenie
Koncepcja asynchroniczności może z początku wydawać się trudna do zrozumienia, ale dzięki asyncio w Pythonie stała się ona dostępniejsza dla programistów. Zachęcamy do eksplorowania tej technologii i tworzenia wydajnych, asynchronicznych rozwiązań dla swoich projektów.



