Prise en charge de la plate-forme¶
Le module asyncio
est conçu pour être portable, mais certaines plates-formes présentent des différences et des limitations subtiles en raison de l'architecture et des capacités sous-jacentes des plates-formes.
Toutes plateformes¶
loop.add_reader()
etloop.add_writer()
ne peuvent pas être utilisées pour surveiller les entrées-sorties de fichiers.
Windows¶
Code source : Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py
Modifié dans la version 3.8: sous Windows, ProactorEventLoop
est désormais la boucle d'événements par défaut.
Aucune boucle d'événements sous Windows ne prend en charge les méthodes suivantes :
loop.create_unix_connection()
andloop.create_unix_server()
are not supported. Thesocket.AF_UNIX
socket family is specific to Unix.loop.add_signal_handler()
etloop.remove_signal_handler()
ne sont pas prises en charge.
SelectorEventLoop
a les limitations suivantes :
SelectSelector
est utilisée pour attendre les événements de connecteur (sockets) : elle prend en charge les connecteurs et est limitée à 512 connecteurs.loop.add_reader()
etloop.add_writer()
n'acceptent que les descripteurs de connecteur (par exemple, les descripteurs de tube fichier ne sont pas pris en charge).Les tubes ne sont pas pris en charge, donc les méthodes
loop.connect_read_pipe()
etloop.connect_write_pipe()
ne sont pas implémentées.Les sous-processus ne sont pas pris en charge, c'est-à-dire que les méthodes
loop.subprocess_exec()
etloop.subprocess_shell()
ne sont pas implémentées.
ProactorEventLoop
a les limitations suivantes :
Les méthodes
loop.add_reader()
etloop.add_writer()
ne sont pas prises en charge.
La résolution de l'horloge monotone sous Windows est généralement d'environ 15,6 millisecondes. La meilleure résolution est de 0,5 milliseconde. La résolution dépend du matériel (disponibilité de HPET) et de la configuration de Windows.
Prise en charge des sous-processus sous Windows¶
Sous Windows, la boucle d'événements par défaut ProactorEventLoop
prend en charge les sous-processus, contrairement à SelectorEventLoop
.
La fonction policy.set_child_watcher()
n'est pas non plus prise en charge, car ProactorEventLoop
a un mécanisme différent pour surveiller les processus enfants.
macOS¶
Les versions modernes de macOS sont entièrement prises en charge.
macOS ≤ 10.8
Sur macOS 10.6, 10.7 et 10.8, la boucle d'événements par défaut utilise selectors.KqueueSelector
, qui ne prend pas en charge les périphériques de caractères sur ces versions. La SelectorEventLoop
peut être configurée manuellement pour utiliser SelectSelector
ou PollSelector
pour prendre en charge les périphériques de caractères sur ces anciennes versions de macOS. Par exemple :
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)