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.
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_UNIX
es específica de Unix.loop.add_signal_handler()
yloop.remove_signal_handler()
no son compatibles.
SelectorEventLoop
tiene las siguientes limitaciones:
SelectSelector
se 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.
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)