17db96d56Sopenharmony_ci.. currentmodule:: asyncio 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. _asyncio-platform-support: 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci================ 87db96d56Sopenharmony_ciPlatform Support 97db96d56Sopenharmony_ci================ 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ciThe :mod:`asyncio` module is designed to be portable, 127db96d56Sopenharmony_cibut some platforms have subtle differences and limitations 137db96d56Sopenharmony_cidue to the platforms' underlying architecture and capabilities. 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciAll Platforms 177db96d56Sopenharmony_ci============= 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci* :meth:`loop.add_reader` and :meth:`loop.add_writer` 207db96d56Sopenharmony_ci cannot be used to monitor file I/O. 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ciWindows 247db96d56Sopenharmony_ci======= 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci**Source code:** :source:`Lib/asyncio/proactor_events.py`, 277db96d56Sopenharmony_ci:source:`Lib/asyncio/windows_events.py`, 287db96d56Sopenharmony_ci:source:`Lib/asyncio/windows_utils.py` 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci-------------------------------------- 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci.. versionchanged:: 3.8 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci On Windows, :class:`ProactorEventLoop` is now the default event loop. 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ciAll event loops on Windows do not support the following methods: 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci* :meth:`loop.create_unix_connection` and 397db96d56Sopenharmony_ci :meth:`loop.create_unix_server` are not supported. 407db96d56Sopenharmony_ci The :data:`socket.AF_UNIX` socket family is specific to Unix. 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci* :meth:`loop.add_signal_handler` and 437db96d56Sopenharmony_ci :meth:`loop.remove_signal_handler` are not supported. 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci:class:`SelectorEventLoop` has the following limitations: 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci* :class:`~selectors.SelectSelector` is used to wait on socket events: 487db96d56Sopenharmony_ci it supports sockets and is limited to 512 sockets. 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci* :meth:`loop.add_reader` and :meth:`loop.add_writer` only accept 517db96d56Sopenharmony_ci socket handles (e.g. pipe file descriptors are not supported). 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci* Pipes are not supported, so the :meth:`loop.connect_read_pipe` 547db96d56Sopenharmony_ci and :meth:`loop.connect_write_pipe` methods are not implemented. 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci* :ref:`Subprocesses <asyncio-subprocess>` are not supported, i.e. 577db96d56Sopenharmony_ci :meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell` 587db96d56Sopenharmony_ci methods are not implemented. 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci:class:`ProactorEventLoop` has the following limitations: 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci* The :meth:`loop.add_reader` and :meth:`loop.add_writer` 637db96d56Sopenharmony_ci methods are not supported. 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ciThe resolution of the monotonic clock on Windows is usually around 15.6 667db96d56Sopenharmony_cimilliseconds. The best resolution is 0.5 milliseconds. The resolution depends on the 677db96d56Sopenharmony_cihardware (availability of `HPET 687db96d56Sopenharmony_ci<https://en.wikipedia.org/wiki/High_Precision_Event_Timer>`_) and on the 697db96d56Sopenharmony_ciWindows configuration. 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci.. _asyncio-windows-subprocess: 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ciSubprocess Support on Windows 757db96d56Sopenharmony_ci----------------------------- 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ciOn Windows, the default event loop :class:`ProactorEventLoop` supports 787db96d56Sopenharmony_cisubprocesses, whereas :class:`SelectorEventLoop` does not. 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ciThe :meth:`policy.set_child_watcher() 817db96d56Sopenharmony_ci<AbstractEventLoopPolicy.set_child_watcher>` function is also 827db96d56Sopenharmony_cinot supported, as :class:`ProactorEventLoop` has a different mechanism 837db96d56Sopenharmony_cito watch child processes. 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_cimacOS 877db96d56Sopenharmony_ci===== 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ciModern macOS versions are fully supported. 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci.. rubric:: macOS <= 10.8 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ciOn macOS 10.6, 10.7 and 10.8, the default event loop 947db96d56Sopenharmony_ciuses :class:`selectors.KqueueSelector`, which does not support 957db96d56Sopenharmony_cicharacter devices on these versions. The :class:`SelectorEventLoop` 967db96d56Sopenharmony_cican be manually configured to use :class:`~selectors.SelectSelector` 977db96d56Sopenharmony_cior :class:`~selectors.PollSelector` to support character devices on 987db96d56Sopenharmony_cithese older versions of macOS. Example:: 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci import asyncio 1017db96d56Sopenharmony_ci import selectors 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci selector = selectors.SelectSelector() 1047db96d56Sopenharmony_ci loop = asyncio.SelectorEventLoop(selector) 1057db96d56Sopenharmony_ci asyncio.set_event_loop(loop) 106