Używam asyncio w mojej aplikacji i jestem nieco zdezorientowany, jeśli chodzi o przekazanie pętli zdarzeń jako argumentu.Przekazywanie pętli asyncio przez argument lub użycie domyślnej pętli asyncio
Masz trzy możliwości podczas pisania funkcji/metody przy użyciu pętli zdarzeń:
- Przepuścić asyncio zdarzeń pętlę jako argument
- Nie używaj argumentu dla przypadku pętla i użyj
asyncio.get_event_loop()
- Opcjonalnie, aby przekazać pętlę zdarzeń jako argument. Jeśli nie zostanie przekazany, należy użyć
asyncio.get_event_loop()
Wygląda na to, że ostatni przypadek jest używany przez większość czasu, ale nawet w aplecie asyncio, użycie jest niespójne. Ponieważ nie zamierzam używać dwóch oddzielnych pętli zdarzeń , które przemawiają przeciwko używaniu tylko asyncio.get_event_loop()
w razie potrzeby?
Jaki jest najlepszy sposób na wykonanie?
Czy możesz wyjaśnić "przekazywanie pętli zdarzeń jako argumentu"? Przekazywanie pętli zdarzeń skąd dokąd? Jest to raczej specyficzne dla aplikacji niż ogólne pytanie (w zależności od tego, w jaki sposób aplikacja używa pętli zdarzeń, odpowiedź może być różna). – farzad
'asyncio.get_event_loop()' zwraca pętlę zdarzeń, możesz ją zmienić za pomocą 'asyncio.set_event_loop()'. To 'get/set' pętli zdarzeń w' _event_loop_policy', zmiennej globalnej w module 'asyncio'. Jest to łatwy sposób na udostępnienie wydarzenia w aplikacji bez potrzeby przekazywania go. Więc jeśli chcesz uniknąć 2 oddzielnych pętli zdarzeń, możesz zarejestrować pętlę zdarzeń, którą masz w tej zmiennej globalnej, przez 'set_event_loop()'. – farzad
@farzad: Zazwyczaj moja aplikacja zaczyna się od 'loop = asyncio.get_event_loop()'. Następnie konfiguruję asynchroniczne elementy (coroutines, async servers, ...) i moje własne funkcje, w których mam pytanie o przekazanie argumentu pętli. Kiedy wszystko jest skonfigurowane, uruchamiam 'loop.run_forever()'. –