Python - procesy asynchroniczne

Spisie treści
Zanim wejdziemy w świat wielu procesów przetwarzania, serwerów i różnorodnych żądań, musimy wiedzieć, że istnieją różne rodzaje odpowiedzi lub zachowań, synchroniczny i asynchroniczny.
Pierwsza polega na obsłudze żądania zgodnie z teorią kolejek, fifo, lifo itp. Oznacza to, że dopóki proces nie zostanie zakończony nie przechodzi do innego, widząc takie zachowanie nie stanowiłoby to problemu dla programu obsługującego Wątki ponieważ może wygenerować kilka Wątki dla każdego żądania, które spełnia określone funkcje.
Następnie mamy asynchroniczny, który pomaga nam służyć z ten sam wątek kilka żądań w zależności od ich statusu, tak że jeśli kilka żądań jest wykonywanych podczas gdy jedno coś przetwarza, możemy zająć się kolejnym, a może nawet nie powinniśmy czekać na żądanie wysłania danych do klienta:

Jak widać na obrazku, przeprowadzana jest symulacja działania czatu, w którym jest przeglądana, aż do momentu, gdy pojawi się wiadomość do przesłania.
Asynchroniczne procesy wejścia i wyjścia
Kiedy wykonujemy asynchroniczny odczyt żądań klienta, nie jest konieczne, abyśmy początkowo odczytywali wiadomość w całości, ale możemy ją zobaczyć stopniowo, dzięki szybkości przetwarzania.
Do pracy asynchronicznej w Pyton Mamy dwie funkcje, które mogą nam pomóc, jedną jest Wybierz a drugi to głosowanie, z których ta ostatnia jest dostępna tylko dla środowisk UNIX, więc może to być warunek, że kładziemy limit, jeśli chcemy zrobić program wieloplatformowy, jednak jest to rozwiązanie najlepiej skalujące się, więc musimy wziąć te szczegóły pod uwagę.
ten wybierz funkcję przyjmuje 3 sekwencje jako wymagane argumenty, z czwartym argumentem, który jest opcjonalny i zawiera koniec czasu W ciągu kilku sekund sekwencje są połączeniami, na które będziemy czekać, a gdy są 3, odpowiadają następującym: wejście, wyjście, warunki wyjątkowe (błędy, wyjątki itp.).
Jeśli nie określimy a koniec czasu, funkcja Wybierz będzie czekać, aż jedna z sekwencji będzie gotowa do działania, w przeciwnym razie, jeśli określimy limit czasu, bloki będą czekać na odpowiedni czas. Wartości zwracane przez funkcję reprezentują aktywny podzbiór każdej sekwencji, na przykład pierwsza zwrócona sekwencja będzie sekwencją wejściową, w której będziemy mieli coś do przeczytania.
Zobaczmy następujący przykład kodu, jak zaimplementować serwer za pomocą wybierz funkcję:
 zaimportuj gniazdo, wybierz s = socket.socket () host = socket.gethostname () port = 1234 s.bind ((host, port)) s.listen (5) wejścia = [s] podczas gdy True: [b] rs, ws, es = select.select (wejścia, [], []) [/ b] for r in rs: jeśli r to s: c, addr = s.accept () print 'Połączono z', addr input.append (c) else: try: data = r.recv (1024) Disconnected = brak danych z wyjątkiem socket.error: Disconnected = True jeśli odłączony: print r.getpeername (), 'disconnected' input.remove (r) else: print data 

Jak widzimy, kiedy nazywamy wybierz funkcję przekazując 3 sekwencje obowiązkowe, przekazujemy zmienną wejścia, który jest powiązany z tym, co serwer przechwytuje podczas nasłuchiwania na porcie TCP 1234, następnie wykonujemy iterację, aby pokazać informacje.
Jak widać, ten aspekt wdrożenia jest dość prosty i granicę będzie dawać nasza kreatywność przy tworzeniu programu.Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave