Soporte de plataforma¶
El módulo asyncio está diseñado para ser portátil, pero algunas plataformas tienen diferencias y limitaciones sutiles debido a la arquitectura y las capacidades subyacentes de las plataformas.
Todas las plataformas¶
loop.add_reader()yloop.add_writer()no se pueden utilizar para supervisar la E/S del archivo.loop.connect_read_pipe()andloop.connect_write_pipe()cannot be used with regular files. See Supported pipe objects for the objects that are accepted on each platform.
Windows¶
Código fuente: Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py
Distinto en la versión 3.8: En Windows, ProactorEventLoop es ahora el bucle de eventos predeterminado.
Todos los bucles de eventos en Windows no admiten los métodos siguientes:
loop.create_unix_connection()yloop.create_unix_server()no son compatibles. La familia de socketssocket.AF_UNIXes específica de Unix.loop.add_signal_handler()yloop.remove_signal_handler()no son compatibles.
SelectorEventLoop tiene las siguientes limitaciones:
SelectSelectorse utiliza para esperar los eventos de los sockets: soporta los sockets y está limitado a 512 sockets.loop.add_reader()yloop.add_writer()sólo aceptan manejadores de sockets (por ejemplo, los descriptores de archivos de tuberías no están soportados).Las tuberías no están soportadas, por lo que los métodos
loop.connect_read_pipe()yloop.connect_write_pipe()no están implementados.Subprocesos no están soportados, es decir, los métodos
loop.subprocess_exec()yloop.subprocess_shell()no están implementados.
ProactorEventLoop tiene las siguientes limitaciones:
Los métodos
loop.add_reader()yloop.add_writer()no están soportados.loop.connect_read_pipe()andloop.connect_write_pipe()only accept a handle opened for overlapped I/O. See Supported pipe objects for which objects are supported.
La resolución del reloj monótono de Windows suele ser de unos 15,6 milisegundos. La mejor resolución es de 0,5 milisegundos. La resolución depende del hardware (disponibilidad de HPET) y de la configuración de Windows.
Soporte de sub-procesos en Windows¶
En Windows, el bucle de eventos por defecto ProactorEventLoop soporta subprocesos, mientras que SelectorEventLoop no lo hace.
macOS¶
Las versiones modernas de MacOS son totalmente compatibles.
macOS <= 10.8
En macOS 10.6, 10.7 y 10.8, el bucle de eventos por defecto utiliza selectors.KqueueSelector, que no soporta dispositivos de caracteres en estas versiones. El SelectorEventLoop puede ser configurado manualmente para usar SelectSelector o PollSelector para soportar dispositivos de caracteres en estas versiones antiguas de macOS. Ejemplo:
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)