107 lines
3.0 KiB
ReStructuredText
107 lines
3.0 KiB
ReStructuredText
|
.. currentmodule:: asyncio
|
||
|
|
||
|
|
||
|
.. _asyncio-platform-support:
|
||
|
|
||
|
|
||
|
================
|
||
|
Platform Support
|
||
|
================
|
||
|
|
||
|
The :mod:`asyncio` module is designed to be portable,
|
||
|
but some platforms have subtle differences and limitations
|
||
|
due to the platforms' underlying architecture and capabilities.
|
||
|
|
||
|
|
||
|
All Platforms
|
||
|
=============
|
||
|
|
||
|
* :meth:`loop.add_reader` and :meth:`loop.add_writer`
|
||
|
cannot be used to monitor file I/O.
|
||
|
|
||
|
|
||
|
Windows
|
||
|
=======
|
||
|
|
||
|
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.
|
||
|
The :data:`socket.AF_UNIX` socket family is specific to Unix.
|
||
|
|
||
|
* :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.create_datagram_endpoint` method
|
||
|
is not supported.
|
||
|
|
||
|
* 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
|
||
|
msec. The best resolution is 0.5 msec. The resolution depends on the
|
||
|
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
|
||
|
-----------------------------
|
||
|
|
||
|
:class:`SelectorEventLoop` on Windows does not support subproceses.
|
||
|
On Windows, :class:`ProactorEventLoop` should be used instead::
|
||
|
|
||
|
import asyncio
|
||
|
|
||
|
asyncio.set_event_loop_policy(
|
||
|
asyncio.WindowsProactorEventLoopPolicy())
|
||
|
|
||
|
asyncio.run(your_code())
|
||
|
|
||
|
|
||
|
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)
|