Dyspozytorzy w Pythonie z Asyncio
Programowanie oparte na zdarzeniach to paradygmat programowania, w którym przebieg programu jest określany przez występujące zdarzenia, a nie przez sekwencję instrukcji wykonywanych w określonej kolejności. W programowaniu opartym na zdarzeniach program reaguje na zdarzenia w systemie lub środowisku, zamiast wykonywać z góry określony zestaw instrukcji.
Zdarzenia mogą wyzwalać różne źródła, takie jak dane wprowadzane przez użytkownika, zdarzenia systemowe, aktywność sieciowa lub liczniki czasu. Kiedy wystąpi zdarzenie, program może na nie zareagować, wykonując jedną lub więcej funkcji lub wywołań zwrotnych zarejestrowanych do obsługi tego konkretnego zdarzenia. Dzięki temu program jest bardziej elastyczny i responsywny, ponieważ może reagować na zdarzenia w miarę ich pojawiania się, zamiast czekać na zakończenie określonej sekwencji działań.
Programowanie oparte na zdarzeniach jest powszechnie stosowane w graficznych interfejsach użytkownika (GUI), w których działania użytkownika, takie jak kliknięcia myszą lub wprowadzanie danych z klawiatury, są traktowane jako zdarzenia wyzwalające działania lub aktualizacje w programie. Jest również używany w tworzeniu stron internetowych, gdzie żądania HTTP lub zdarzenia przeglądarki wyzwalają wykonanie kodu po stronie serwera lub klienta. Architektury sterowane zdarzeniami stają się również coraz bardziej powszechne w systemach rozproszonych, w których komunikaty lub zdarzenia komunikują się między różnymi usługami lub komponentami.
Dyspozytor
W kontekście programowania opartego na zdarzeniach dyspozytor jest obiektem, który odbiera zdarzenia, a następnie wysyła je do odpowiednich procedur obsługi zdarzeń. Dyspozytor jest odpowiedzialny za zarządzanie rejestracją i wyrejestrowywaniem programów obsługi zdarzeń oraz zapewnienie, że zdarzenia są dostarczane do właściwych osób.
W niektórych platformach sterowanych zdarzeniami dyspozytor jest nazywany magistralą lub pętlą zdarzeń. Magistrala zdarzeń odbiera i wysyła zdarzenia z różnych źródeł do odpowiednich procedur obsługi zdarzeń. Pętla zdarzeń zarządza planowaniem i wykonywaniem współprogramów i wywołań zwrotnych w odpowiedzi na zdarzenia.
Dyspozytor może również wykonywać inne zadania, takie jak filtrowanie i przetwarzanie zdarzeń, zanim zostaną one wysłane do obsługi zdarzeń. Na przykład dyspozytor może zaimplementować wzorzec publikowania-subskrybowania, w którym zdarzenia są filtrowane i wysyłane tylko do tych programów obsługi zdarzeń, które zasubskrybowały ich otrzymywanie.
Utwórz dyspozytora w Pythonie za pomocą Asyncio
Aby utworzyć dyspozytora za pomocą asyncio w Pythonie, możesz użyć tej asyncio.Queue
klasy do utworzenia kolejki, która może być używana do przekazywania wiadomości między współprogramami. Oto przykład prostej implementacji dyspozytora. Utwórz plik dispatcher.py
i wstaw następujący kod:
import asyncio
async def producer(queue):
for i in range(10):
await asyncio.sleep(1)
await queue.put(i)
await queue.put(None)
async def consumer(queue):
while True:
item = await queue.get()
if item is None:
break
print(f"Consumed: {item}")
queue.task_done()
async def main():
queue = asyncio.Queue()
tasks = [
asyncio.create_task(producer(queue)),
asyncio.create_task(consumer(queue)),
]
await asyncio.gather(*tasks)
await queue.join()
asyncio.run(main())
W main
coroutine tworzymy instancję asyncio.Queue
i przekazujemy ją zarówno do producer
i consumer
coroutines. Następnie tworzymy zadania dla obu współprogramów za pomocą asyncio.create_task()
, i przekazujemy je, asyncio.gather()
aby uruchamiały je jednocześnie. Na koniec dzwonimy, queue.join()
aby poczekać na zakończenie wszystkich zadań.
Uruchom plik z python3 dispatcher.py
. Otrzymasz poniższe dane wyjściowe:
Kod tego artykułu jest dostępny tutaj na Github:
Wniosek
Dyspozytor generalnie odgrywa kluczową rolę w zarządzaniu zdarzeniami w systemie opartym na zdarzeniach. Zapewnia, że zdarzenia są przetwarzane wydajnie i dokładnie, a procedury obsługi zdarzeń są poprawnie rejestrowane i wyrejestrowywane w razie potrzeby.
To wszystko w tym artykule! Zachęcamy do pozostawienia opinii lub pytań w komentarzach. Jeśli uważasz, że to ekscytująca lektura, zostaw kilka braw i obserwuj! Dzięki!