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()
andloop.create_unix_server()
are not supported. Thesocket.AF_UNIX
socket family is specific to 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.
The resolution of the monotonic clock on Windows is usually around 15.6 milliseconds. The best resolution is 0.5 milliseconds. The resolution depends on the hardware (availability of HPET) and on the Windows configuration.
Soporte de sub-procesos en Windows¶
En Windows, el bucle de eventos por defecto ProactorEventLoop
soporta subprocesos, mientras que SelectorEventLoop
no lo hace.
La función policy.set_child_watcher()
tampoco está soportada, ya que ProactorEventLoop
tiene un mecanismo diferente para vigilar los procesos hijos.
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)