2018-09-11 13:54:40 -03:00
|
|
|
.. currentmodule:: asyncio
|
|
|
|
|
|
|
|
|
|
|
|
.. _asyncio-platform-support:
|
|
|
|
|
|
|
|
|
2018-09-17 20:16:44 -03:00
|
|
|
================
|
|
|
|
Platform Support
|
|
|
|
================
|
2018-09-11 13:54:40 -03:00
|
|
|
|
2018-09-17 20:16:44 -03:00
|
|
|
The :mod:`asyncio` module is designed to be portable,
|
2018-09-13 20:14:41 -03:00
|
|
|
but some platforms have subtle differences and limitations
|
|
|
|
due to the platforms' underlying architecture and capabilities.
|
2018-09-11 13:54:40 -03:00
|
|
|
|
|
|
|
|
|
|
|
All Platforms
|
|
|
|
=============
|
|
|
|
|
|
|
|
* :meth:`loop.add_reader` and :meth:`loop.add_writer`
|
2018-09-17 20:16:44 -03:00
|
|
|
cannot be used to monitor file I/O.
|
2018-09-11 13:54:40 -03:00
|
|
|
|
|
|
|
|
|
|
|
Windows
|
|
|
|
=======
|
|
|
|
|
2019-10-10 20:18:46 -03:00
|
|
|
**Source code:** :source:`Lib/asyncio/proactor_events.py`,
|
|
|
|
:source:`Lib/asyncio/windows_events.py`,
|
|
|
|
:source:`Lib/asyncio/windows_utils.py`
|
|
|
|
|
|
|
|
--------------------------------------
|
|
|
|
|
2018-09-25 12:27:08 -03:00
|
|
|
.. versionchanged:: 3.8
|
|
|
|
|
|
|
|
On Windows, :class:`ProactorEventLoop` is now the default event loop.
|
|
|
|
|
2018-09-11 13:54:40 -03:00
|
|
|
All event loops on Windows do not support the following methods:
|
|
|
|
|
|
|
|
* :meth:`loop.create_unix_connection` and
|
|
|
|
:meth:`loop.create_unix_server` are not supported.
|
2018-09-17 20:16:44 -03:00
|
|
|
The :data:`socket.AF_UNIX` socket family is specific to Unix.
|
2018-09-11 13:54:40 -03:00
|
|
|
|
|
|
|
* :meth:`loop.add_signal_handler` and
|
|
|
|
:meth:`loop.remove_signal_handler` are not supported.
|
|
|
|
|
|
|
|
:class:`SelectorEventLoop` has the following limitations:
|
|
|
|
|
|
|
|
* :class:`~selectors.SelectSelector` is used to wait on socket events:
|
|
|
|
it supports sockets and is limited to 512 sockets.
|
|
|
|
|
|
|
|
* :meth:`loop.add_reader` and :meth:`loop.add_writer` only accept
|
|
|
|
socket handles (e.g. pipe file descriptors are not supported).
|
|
|
|
|
|
|
|
* Pipes are not supported, so the :meth:`loop.connect_read_pipe`
|
|
|
|
and :meth:`loop.connect_write_pipe` methods are not implemented.
|
|
|
|
|
|
|
|
* :ref:`Subprocesses <asyncio-subprocess>` are not supported, i.e.
|
|
|
|
:meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell`
|
|
|
|
methods are not implemented.
|
|
|
|
|
|
|
|
:class:`ProactorEventLoop` has the following limitations:
|
|
|
|
|
|
|
|
* The :meth:`loop.add_reader` and :meth:`loop.add_writer`
|
|
|
|
methods are not supported.
|
|
|
|
|
|
|
|
The resolution of the monotonic clock on Windows is usually around 15.6
|
2021-09-29 06:09:56 -03:00
|
|
|
milliseconds. The best resolution is 0.5 milliseconds. The resolution depends on the
|
2018-09-11 13:54:40 -03:00
|
|
|
hardware (availability of `HPET
|
|
|
|
<https://en.wikipedia.org/wiki/High_Precision_Event_Timer>`_) and on the
|
|
|
|
Windows configuration.
|
|
|
|
|
|
|
|
|
|
|
|
.. _asyncio-windows-subprocess:
|
|
|
|
|
|
|
|
Subprocess Support on Windows
|
|
|
|
-----------------------------
|
|
|
|
|
2018-09-25 12:27:08 -03:00
|
|
|
On Windows, the default event loop :class:`ProactorEventLoop` supports
|
|
|
|
subprocesses, whereas :class:`SelectorEventLoop` does not.
|
2018-09-11 13:54:40 -03:00
|
|
|
|
|
|
|
The :meth:`policy.set_child_watcher()
|
|
|
|
<AbstractEventLoopPolicy.set_child_watcher>` function is also
|
|
|
|
not supported, as :class:`ProactorEventLoop` has a different mechanism
|
|
|
|
to watch child processes.
|
|
|
|
|
|
|
|
|
|
|
|
macOS
|
|
|
|
=====
|
|
|
|
|
|
|
|
Modern macOS versions are fully supported.
|
|
|
|
|
|
|
|
.. rubric:: macOS <= 10.8
|
|
|
|
|
|
|
|
On macOS 10.6, 10.7 and 10.8, the default event loop
|
|
|
|
uses :class:`selectors.KqueueSelector`, which does not support
|
|
|
|
character devices on these versions. The :class:`SelectorEventLoop`
|
|
|
|
can be manually configured to use :class:`~selectors.SelectSelector`
|
|
|
|
or :class:`~selectors.PollSelector` to support character devices on
|
|
|
|
these older versions of macOS. Example::
|
|
|
|
|
|
|
|
import asyncio
|
|
|
|
import selectors
|
|
|
|
|
|
|
|
selector = selectors.SelectSelector()
|
|
|
|
loop = asyncio.SelectorEventLoop(selector)
|
|
|
|
asyncio.set_event_loop(loop)
|