Plattformunterstützung¶
Das Modul asyncio ist portabel konzipiert, aber einige Plattformen weisen subtile Unterschiede und Einschränkungen auf, die auf der zugrunde liegenden Architektur und den Fähigkeiten der Plattformen beruhen.
Alle Plattformen¶
loop.add_reader()undloop.add_writer()können nicht zur Überwachung von Dateieingaben/-ausgaben verwendet werden.
Windows¶
Quellcode: Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py
Geändert in Version 3.8: Unter Windows ist ProactorEventLoop nun die Standard-Event-Schleife.
Alle Event-Schleifen unter Windows unterstützen die folgenden Methoden nicht
loop.create_unix_connection()undloop.create_unix_server()werden nicht unterstützt. Die Socket-Familiesocket.AF_UNIXist spezifisch für Unix.loop.add_signal_handler()undloop.remove_signal_handler()werden nicht unterstützt.
SelectorEventLoop hat die folgenden Einschränkungen
SelectSelectorwird verwendet, um auf Socket-Ereignisse zu warten: er unterstützt Sockets und ist auf 512 Sockets beschränkt.loop.add_reader()undloop.add_writer()akzeptieren nur Socket-Handles (z. B. Pipe-Dateideskriptoren werden nicht unterstützt).Pipes werden nicht unterstützt, daher sind die Methoden
loop.connect_read_pipe()undloop.connect_write_pipe()nicht implementiert.Subprozesse werden nicht unterstützt, d.h. die Methoden
loop.subprocess_exec()undloop.subprocess_shell()sind nicht implementiert.
ProactorEventLoop hat die folgenden Einschränkungen
Die Methoden
loop.add_reader()undloop.add_writer()werden nicht unterstützt.
Die Auflösung der monotonen Uhr unter Windows beträgt normalerweise etwa 15,6 Millisekunden. Die beste Auflösung beträgt 0,5 Millisekunden. Die Auflösung hängt von der Hardware (Verfügbarkeit von HPET) und von der Windows-Konfiguration ab.
Unterstützung für Subprozesse unter Windows¶
Unter Windows unterstützt die Standard-Event-Schleife ProactorEventLoop Subprozesse, während SelectorEventLoop dies nicht tut.
macOS¶
Moderne macOS-Versionen werden vollständig unterstützt.
macOS <= 10.8
Unter macOS 10.6, 10.7 und 10.8 verwendet die Standard-Event-Schleife selectors.KqueueSelector, der Zeichengeräte (character devices) in diesen Versionen nicht unterstützt. Die SelectorEventLoop kann manuell konfiguriert werden, um SelectSelector oder PollSelector zu verwenden, um Zeichengeräte in diesen älteren macOS-Versionen zu unterstützen. Beispiel
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)