# 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()` et `loop.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()` and `loop.create_unix_server()` are not supported. The `socket.AF_UNIX` socket family is specific to Unix.

- `loop.add_signal_handler()` et `loop.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()` et `loop.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()` et `loop.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()` et `loop.subprocess_shell()` ne sont pas implémentées.

`ProactorEventLoop` a les limitations suivantes :

- Les méthodes `loop.add_reader()` et `loop.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)