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