Python Asyncio Get

Python Asyncio Get

Asynchroniczne wejście/wyjście lub asyncio to metodologia programowania, która wykorzystuje pętlę zdarzeń lub pojedynczy wątek do osiągnięcia wysokiej współbieżności. Python nie jest jedynym językiem lub ramami, które wykorzystują podejście; NodeJS JavaScript jest być może najbardziej znany. Używamy asyncio w Pythonie zamiast wieloczynnik. Znacznie trudniejsze jest napotkanie problemów rasowych podczas korzystania z programowania asynchronicznego, ponieważ możesz wskazać, gdzie kod zmieni się z jednego zadania na następne.Ze względu na wymóg, aby każdy wątek miał swój stos, wątki używają dużej ilości danych. Programowanie asynchroniczne utrzymuje stos małego stosu, odrzucając go w sposób ciągły między operacjami, umożliwiając wszystkim programom dzielenie się tym samym stosem. Platforma potrzebuje więcej pamięci do obsługi wątków, ponieważ są konstrukcjami systemu operacyjnego. Zadania asynchroniczne nie mają tego problemu.

Tutaj omówimy funkcję asyncio - zbierz. Dwie kluczowe funkcje należy zrozumieć podczas nauki modułu asyncio Python. Pierwsza opcja jest uruchomiona, która jest prostą metodą uruchamiania coroutine, a druga opcja jest zbierana. Obecny kontekst uruchomi się ponownie po zakończeniu wszystkich coroutinów, umożliwiając uruchomienie wielu z nich jednocześnie za pomocą zgromadzenia.

Odpowiedzi każdej Coroutine są wymienione w wartości zwracanej. Jak sama nazwa wskazuje, Asyncio.Zbierz () głównie koncentruje się na zebraniu wyników. Czeka na wiele kontraktów terminowych, a następnie zwraca wyniki w określonej sekwencji. Asyncio.zgromadzić () anuluje wszystkie niekompletne zadania, które gromadzi, jeśli sama zostanie anulowana.

Składnia asyncyo.Zbierz się w Python

Asyncio.zgromadzić () akceptuje jeden lub wielokrotność oczekiwania jako *args, w razie potrzeby zawiera je w zadaniach, a następnie czeka na ukończenie każdego z nich. Wyniki każdego oczekiwania są następnie zwracane w kolejności, którą im przekazałeś:

# f_output, g_output = oczekiwanie na asyncio.Zbierz (f ​​(), g ())

Możesz także podać wyjątki zwrotu = prawda, w których wyjątki sprawy są dostarczane wraz z zwykłymi wynikami, i musisz sam ustalić, czy odnieśli sukces.

Przykład 1:
Asyncio.Funkcja Zebraj () może być używana do jednoczesnego uruchamiania wielu coroutinów. Coroutines są obsługiwane jednocześnie przez tę funkcję jako parametry.

Import Asyncio
czas importu
Async def Wishes ():
Drukuj („Hello”)
Oczekiwanie się.sen (1)
Drukuj („Miłego dnia”)
Async def main ():
Zacznij = czas.czas()
Oczekiwanie się.Zbierz (Wishes (), Wishes ())
upłynął = czas.czas () - zacznij
print (f "__name__ wykonane w upłynęło: 0.2f sekundy.")
Asyncio.run (main ())

Tutaj zaimportowaliśmy dwa moduły: asyncio i czas Pythona. Następnie zdefiniowaliśmy funkcję o nazwie „życzenia”. Ustanowiliśmy definicję funkcji asynchronicznej. Definicja async zawiera tylko kod asynchroniczny; Wszystkie inne kody są synchroniczne. Wewnątrz funkcji async Def, wydrukowaliśmy wartości ciągów. Asyncio.Wywołano funkcję snu, a wartość zawieszenia wybranego wątku ustawiono za pomocą słowa kluczowego oczekiwania. Czeka na zwraca kontrolę do pętli zdarzenia podczas wywołania funkcji.

Następnie skonstruowaliśmy inną funkcję def async jako main (). Wewnątrz tej funkcji ustawiamy zmienną, w której wywoływana jest funkcja czasu z modułu czasu Pythona. Za pomocą słowa kluczowego oczekiwaliśmy, zdefiniowaliśmy asyncio.Zbierz funkcję, aby zebrać wynik życzeń funkcji. Nagraliśmy również upływ czasu na wykonanie kodu głównego.

W wyjściu mamy coroutines generowane dwa razy jednocześnie z funkcji Wishes (). Wyjście wspomnianego wcześniej kodu jest z powodzeniem wyświetlane na poniższym obrazku:

Przykład 2:
Wykonanie kilku współistniejących można zaplanować dynamicznie za pomocą metody Gromadzenia Asyncio, jak pokazano w tym przykładzie. Po pomyślnym zbieraniu wszystkich wyników współistniejących, czekające połączenie zapewnia wartości jako wyniki i wydrukuje.

Import Asyncio
async def add (a: int, b: int):
Zwróć A + B
async def get_result ():
wejścia = [(4, 5), (6, 6), (7, 8), (9, 4)]
zadania = [asyncio.create_task (add (a, b)) dla a, b w wejściach]
wynik = asyncio.Zbierz (*zadania)
Drukuj („wynik:”)
Drukuj (wynik czekaj)
Asyncio.run (get_result ())

W tym konkretnym przykładzie uwzględniliśmy moduł asyncio do wykorzystania asyncyo.Zbierz funkcję. Następnie zdefiniowaliśmy funkcję asynchroniczną do dodawania. Wygenerowaliśmy funkcję ADD Async i ustawiliśmy dwie zmienne A i B z typem danych INT do funkcji Dodaj. Za pomocą polecenia powrotu dodaliśmy te zmienne do operatora plus.

Po ustawieniu Coroutine stworzyliśmy inną funkcję, aby zaplanować pętlę zdarzeń w Coroutine. Funkcja nazywa się „get_result”, w której zainicjowaliśmy listę z zmiennymi wejściami. Następnie utworzyliśmy listę zadań w zmiennej zadania. Z asyncio.Zbierz funkcję, zebraliśmy wynik listy zadań, przekazując zadanie wskaźnika do tej funkcji. W końcu wydrukowaliśmy wynik. Z poprzedniego programu uzyskano następującą listę zadań:

Przykład 3:
Zebraliśmy wynik przyszłego zadania, przekazując przyszłe zadanie w Asyncio.Zbierz funkcję. Przyszłość wyznacza obliczenia, które są obecnie uruchomione lub będą planowane w przyszłości. Ostateczny wynik procedury asynchronicznej jest reprezentowany przez unikalny obiekt na niskim poziomie oczekiwany.

Import Asyncio
z Asyncio Import Future
Async Def Function1 (przyszłość):
Drukuj („Funkcja 1 będzie spać przez 3 sekundy”)
czekają na asyncio.sen (3)
Drukuj („Funkcja 1 Rozwiązywanie przyszłości”)
przyszły.zrobione()
przyszły.set_result („przyszłość jest rozwiązana”)
Async def Function2 (przyszłość):
print („funkcja 2 będzie oczekiwać na przyszłość”)
czekaj na przyszłość
print („funkcja2 znajduje się w przyszłości”)
Async def main ():
przyszłość = przyszłość ()
Wyniki = oczekiwanie na).Zbierz (funkcja2 (przyszłość), funkcja 1 (przyszłość))
Jeśli __name __ == "__ main___":
Asyncio.run (main ())
Drukuj („główne zakończenie”)

Tutaj najpierw dołączyliśmy moduł asyncio i moduł przyszłego z Asyncio. Następnie zdefiniowaliśmy Coroutine jako „funkcję 1” i przeszliśmy przyszłość. Następnie, wewnątrz tego korytarza, nazwaliśmy funkcję snu do zawieszenia korytarza. W przyszłości zadzwoniliśmy do połączeń systemowych i set_result System. Tam mamy kolejną coroutine, która nazywa się „funkcja2”, a także przyjmuje przyszłość jako argument. W przyszłości zadzwoniliśmy do polecenia oczekiwania, aby się rozwiązać.

Następnie mamy główną definicję asynchroniczną, którą nazywaliśmy funkcją przyszłej, i otrzymujemy wynik z przyszłości przez asyncyo.Zbierz metodę. W końcu wydrukowaliśmy instrukcję, gdy główna funkcja została zakończona. Wyjście wspomnianego wcześniej kodu jest z powodzeniem wyświetlane na poniższym obrazku:

Wniosek

Zgromadzenie jest silne, jak widać. Możemy zwięźle poprosić o kilka zasobów jednocześnie, co jest typowym zjawiskiem w programach internetowych. Z pomocą Python Asyncio.Zbieraj wbudowany moduł, w tym samouczku zaprezentowano programowanie asynchroniczne. Zebraliśmy wyniki Coroutines, zadania i przyszłości. Kod równoległy może być najlepszym wyborem, gdy musisz zoptymalizować wydajność dla poszczególnych czynności, ponieważ wcześniej omówiliśmy, jak wykonać liczne Coroutines jednocześnie za pomocą Asyncio.Zbierz metody.