Richtlinien¶
Warnung
Richtlinien sind veraltet und werden in Python 3.16 entfernt. Benutzer werden ermutigt, die Funktion asyncio.run() oder asyncio.Runner mit loop_factory zu verwenden, um die gewünschte Schleifenimplementierung zu nutzen.
Eine Ereignisschleifenrichtlinie ist ein globales Objekt, das verwendet wird, um die aktuelle Ereignisschleife abzurufen und festzulegen sowie neue Ereignisschleifen zu erstellen. Die Standardrichtlinie kann durch eingebaute Alternativen ersetzt werden, um andere Implementierungen von Ereignisschleifen zu verwenden, oder durch eine benutzerdefinierte Richtlinie ersetzt werden, die dieses Verhalten überschreiben kann.
Das Richtlinienobjekt ruft eine separate Ereignisschleife pro Kontext ab und legt diese fest. Standardmäßig ist dies pro Thread, benutzerdefinierte Richtlinien könnten Kontext jedoch anders definieren.
Benutzerdefinierte Ereignisschleifenrichtlinien können das Verhalten von get_event_loop(), set_event_loop() und new_event_loop() steuern.
Richtlinienobjekte sollten die in der abstrakten Basisklasse AbstractEventLoopPolicy definierten APIs implementieren.
Richtlinie abrufen und festlegen¶
Die folgenden Funktionen können verwendet werden, um die Richtlinie für den aktuellen Prozess abzurufen und festzulegen.
- asyncio.get_event_loop_policy()¶
Gibt die aktuelle prozessweite Richtlinie zurück.
Veraltet seit Version 3.14: Die Funktion
get_event_loop_policy()ist veraltet und wird in Python 3.16 entfernt.
- asyncio.set_event_loop_policy(policy)¶
Setzt die aktuelle prozessweite Richtlinie auf policy.
Wenn policy auf
Nonegesetzt wird, wird die Standardrichtlinie wiederhergestellt.Veraltet seit Version 3.14: Die Funktion
set_event_loop_policy()ist veraltet und wird in Python 3.16 entfernt.
Richtlinienobjekte¶
Die abstrakte Basisklasse für Ereignisschleifenrichtlinien ist wie folgt definiert:
- class asyncio.AbstractEventLoopPolicy¶
Eine abstrakte Basisklasse für asyncio-Richtlinien.
- get_event_loop()¶
Ruft die Ereignisschleife für den aktuellen Kontext ab.
Gibt ein Ereignisschleifenobjekt zurück, das die Schnittstelle
AbstractEventLoopimplementiert.Diese Methode sollte niemals
Nonezurückgeben.Geändert in Version 3.6.
- set_event_loop(loop)¶
Setzt die Ereignisschleife für den aktuellen Kontext auf loop.
- new_event_loop()¶
Erstellt und gibt ein neues Ereignisschleifenobjekt zurück.
Diese Methode sollte niemals
Nonezurückgeben.
Veraltet seit Version 3.14: Die Klasse
AbstractEventLoopPolicyist veraltet und wird in Python 3.16 entfernt.
asyncio wird mit den folgenden integrierten Richtlinien ausgeliefert
- class asyncio.DefaultEventLoopPolicy¶
Die Standard-asyncio-Richtlinie. Verwendet
SelectorEventLoopunter Unix undProactorEventLoopunter Windows.Die Standardrichtlinie muss nicht manuell installiert werden. asyncio ist so konfiguriert, dass es die Standardrichtlinie automatisch verwendet.
Geändert in Version 3.8: Unter Windows wird standardmäßig
ProactorEventLoopverwendet.Geändert in Version 3.14: Die Methode
get_event_loop()der Standard-asyncio-Richtlinie löst nun einenRuntimeErroraus, wenn keine Ereignisschleife gesetzt ist.Veraltet seit Version 3.14: Die Klasse
DefaultEventLoopPolicyist veraltet und wird in Python 3.16 entfernt.
- class asyncio.WindowsSelectorEventLoopPolicy¶
Eine alternative Ereignisschleifenrichtlinie, die die
SelectorEventLoop-Ereignisschleifenimplementierung verwendet.Verfügbarkeit: Windows.
Veraltet seit Version 3.14: Die Klasse
WindowsSelectorEventLoopPolicyist veraltet und wird in Python 3.16 entfernt.
- class asyncio.WindowsProactorEventLoopPolicy¶
Eine alternative Ereignisschleifenrichtlinie, die die
ProactorEventLoop-Ereignisschleifenimplementierung verwendet.Verfügbarkeit: Windows.
Veraltet seit Version 3.14: Die Klasse
WindowsProactorEventLoopPolicyist veraltet und wird in Python 3.16 entfernt.
Benutzerdefinierte Richtlinien¶
Um eine neue Ereignisschleifenrichtlinie zu implementieren, wird empfohlen, von DefaultEventLoopPolicy abzuleiten und die Methoden zu überschreiben, für die ein benutzerdefiniertes Verhalten gewünscht wird, z. B.:
class MyEventLoopPolicy(asyncio.DefaultEventLoopPolicy):
def get_event_loop(self):
"""Get the event loop.
This may be None or an instance of EventLoop.
"""
loop = super().get_event_loop()
# Do something with loop ...
return loop
asyncio.set_event_loop_policy(MyEventLoopPolicy())