historii:Konieczność zamknięcia asyncio pętli zdarzeń explicite
Jestem obecnie patrząc przez asyncio basic examples, w szczególności this one - najprostszy możliwy klient HTTP. Główną funkcją uruchamia pętlę zdarzeń, biegnie aż do pobierania danych jest kompletna i zamyka pętlę zdarzeń:
def main():
loop = get_event_loop()
try:
body = loop.run_until_complete(fetch())
finally:
loop.close()
print(body.decode('latin-1'), end='')
Ale kod działa również jeśli pominąć loop.close()
:
def main():
loop = get_event_loop()
body = loop.run_until_complete(fetch())
print(body.decode('latin-1'), end='')
Pytanie :
Podczas gdy istnieje przykład, pytanie jest ogólne - co może potencjalnie pójść źle, jeśli zapomni się zamknąć pętlę zdarzeń asyncio? Czy pętla zdarzeń będzie zawsze niejawnie zamknięta?
Będziesz przeciekać zasoby. –
Jak myślisz, co to jest domyślne zamknięcie? Wydaje mi się, że odśmiecanie pamięci, na którym można polegać tylko po zakończeniu programu, jak długo program będzie działał po zakończeniu pętli zdarzeń, dopóki program się nie skończy? –
@FilipHaglund dzięki. Czy możesz wymyślić sposób na sprawdzenie/wykazanie tego? – alecxe