Samouczek Python Asyncio

Samouczek Python Asyncio
Biblioteka asyncio została wprowadzona w Python 3.4 Aby wykonać jednoosobowe programy współbieżne. Ta biblioteka jest popularna niż inne biblioteki i ramy ze względu na imponującą prędkość i różne użytkowanie. Ta biblioteka jest używana w Pythonie do tworzenia, wykonywania i struktury kinautinów i obsługi wielu zadań jednocześnie bez wykonywania zadań równolegle. Główne części tej biblioteki są zdefiniowane poniżej:

Coroutine: Część kodu, którą można przerwać i wznowić w skrypcie wielokrotnie, nazywa się Coroutine. Coroutines współpracuje z programem wielowocarstwowym. Kiedy jedna coroutine zatrzymuje się, inna coroutine może wykonać.

Pętla wydarzenia: Służy do rozpoczęcia wykonywania coroutines i obsługi operacji wejściowych/wyjściowych. Wymaga wielu zadań i uzupełniają je.

Zadanie: Wykonanie i wynik coroutin są zdefiniowane przez zadania. Możesz przypisać wiele zadań za pomocą biblioteki asyncio i uruchomić zadania asynchroniczne.

Przyszły: Działa jako przyszłe miejsce do przechowywania, w którym wynik Coroutines będzie przechowywać po zakończeniu. Jest to przydatne, gdy każda coroutine wymaga poczekać na wynik innej coroutine.

Jak możesz wdrożyć powyższe pojęcia biblioteki asyncio, jest pokazany w tym samouczku za pomocą niektórych prostych przykładów.

Przykład-1: Utwórz pojedynczą coroutinę z jednym zadaniem

Utwórz plik o nazwie Async1.py i dodaj następujący kod. Biblioteka asyncio jest importowana w celu korzystania z funkcji tej biblioteki. dodać Funkcja jest zadeklarowana w celu obliczenia suma określonego zakresu liczb. Zakres liczb od 1 do 101 jest przypisany przez zadanie z jednym drugim opóźnieniem. Pętla zdarzeń jest deklarowana, że ​​będzie działać do momentu zakończenia wszystkich zadań głównej metody. Po obliczeniu wartości funkcja będzie czekać na jedną sekundę i wydrukować wynik.

Import Asyncio
async def add (start, kończą, czekaj):
#Initializuj zmienną SUM
Sum = 0
#Uzupełnij sumę wszystkich liczb
dla n w zakresie (start, koniec):
sum += n
#Wait na przypisane sekundy
czekają na asyncio.spać (czekaj)
#PRORT RESY
print (f'sum od start do end to sum ')
Async def main ():
#Patrzy jedno zadanie
zadanie = pętla.create_task (dodaj (1 101,1))
#Rund zadanie asynchronicznie
czekają na asyncio.Czekaj ([zadanie])
Jeśli __name__ == '__main__':
#Declare Event Loop
Loop = Asyncio.get_event_loop ()
#RUN kod do czasu wykonania całego zadania
pętla.run_until_complete (main ())
#Zamknąć pętlę
pętla.zamknąć()

Wyjście:

$ Python3 Async1.py

Wyjście pokazuje sumę od 1 do 101, która wynosi 5050.

Przykład-2: Utwórz wiele Coroutines

Korzystanie z biblioteki asyncio zostanie usunięte, gdy uruchomisz wiele coroutinów jednocześnie. Utwórz nowy plik wymieniony Async2.py i dodaj następujący kod. Trzy zadania są generowane z trzema różnymi zakresami i wartościami oczekiwania główny() metoda. Pierwsze zadanie obliczy sumę od 5 do 500000, czekając 3 sekundy, drugie zadanie będzie obliczyć sumę od 2 do 300000, czekając 2 sekundy, a trzecie zadanie będzie obliczyć sumę od 10 do 1000 przez oczekiwanie 1 sekundy. Zadanie z niskimi wartościami oczekiwania na początku zostanie zakończone, a zadanie o wysokiej wartości oczekiwania zostanie w końcu zakończone.

Import Asyncio
async def add (start, kończą, czekaj):
#Initializuj zmienną SUM
Sum = 0
#Uzupełnij sumę wszystkich liczb
dla n w zakresie (start, koniec):
sum += n
#Wait na przypisane sekundy
czekają na asyncio.spać (czekaj)
#PRORT RESY
print (f'sum od start do end to sum ')
Async def main ():
#Pierwsze zadanie
task1 = pętla.create_task (dodaj (5500000,3))
#Zasobaj drugie zadanie
task2 = pętla.create_task (dodaj (2300000,2))
#Zatrudnij trzecie zadanie
task3 = pętla.create_task (dodaj (10,1000,1))
#RUN Zadania asynchronicznie
czekają na asyncio.Wait ([Task1, Task2, Task3])
Jeśli __name__ == '__main__':
#Declare Event Loop
Loop = Asyncio.get_event_loop ()
#RUN kod do czasu wykonania całego zadania
pętla.run_until_complete (main ())
#Zamknąć pętlę
pętla.zamknąć()

Wyjście:

$ Python3 Async1.py

Dane wyjściowe pokazuje, że zadanie3 jest zakończone najpierw, ponieważ czas oczekiwania tego zadania wynosił zaledwie 1 sekundę, a zadanie.

Przykład-3: Coroutines z przyszłością

Ten przykład pokazuje użycie przyszłego obiektu biblioteki asyncio. Utwórz nowy plik wymieniony Async3.py i dodaj następujący kod. W tym przykładzie przypisane są dwa zadania na przyszłość. Pokaż wiadomość Funkcja jest tutaj zadeklarowana w celu wydrukowania wiadomości przed wykonaniem Coroutine i po zakończeniu wykonania. Pierwsze zadanie będzie czekać na 2 sekundy i zakończy ostatnie. Drugie zadanie będzie czekać na 1 sekundy i ukończy najpierw.

Import Asyncio
Async def show_message (numer, poczekaj):
#Print wiadomość
print (f'task liczba działa ')
#Wait na przypisane sekundy
czekają na asyncio.spać (czekaj)
print (f'task numer jest zakończony ')
async def stop_after (kiedy):
czekają na asyncio.sen (kiedy)
pętla.zatrzymywać się()
Async def main ():
#Pierwsze zadanie
task1 = asyncio.zapewnić_future (show_message (1,2))
Drukuj („Harmonogram 1”)
#Zasobaj drugie zadanie
task2 = asyncio.zapewnić_future (show_message (2,1))
druk („harmonogram 2”)
#RUN Zadania asynchronicznie
czekają na asyncio.Wait ([Task1, Task2])
Jeśli __name__ == '__main__':
#Declare Event Loop
Loop = Asyncio.get_event_loop ()
#RUN kod głównej metody do czasu wykonania wszystkich zadań
pętla.run_until_complete (main ())

Wyjście:

$ Python3 Async3.py

W wyjściu pokazano, że zadanie.

Wniosek

Wyjaśniono podstawową koncepcję programowania asynchronicznego za pomocą Asyncio Library of Python. Mam nadzieję, że będziesz mógł napisać wielowo-strepinowy kod w Pythonie po ćwiczeniu przykładów tego samouczka.