1.. currentmodule:: asyncio
2
3
4.. _asyncio-platform-support:
5
6
7================
8Platform Support
9================
10
11The :mod:`asyncio` module is designed to be portable,
12but some platforms have subtle differences and limitations
13due to the platforms' underlying architecture and capabilities.
14
15
16All Platforms
17=============
18
19* :meth:`loop.add_reader` and :meth:`loop.add_writer`
20  cannot be used to monitor file I/O.
21
22
23Windows
24=======
25
26**Source code:** :source:`Lib/asyncio/proactor_events.py`,
27:source:`Lib/asyncio/windows_events.py`,
28:source:`Lib/asyncio/windows_utils.py`
29
30--------------------------------------
31
32.. versionchanged:: 3.8
33
34   On Windows, :class:`ProactorEventLoop` is now the default event loop.
35
36All event loops on Windows do not support the following methods:
37
38* :meth:`loop.create_unix_connection` and
39  :meth:`loop.create_unix_server` are not supported.
40  The :data:`socket.AF_UNIX` socket family is specific to Unix.
41
42* :meth:`loop.add_signal_handler` and
43  :meth:`loop.remove_signal_handler` are not supported.
44
45:class:`SelectorEventLoop` has the following limitations:
46
47* :class:`~selectors.SelectSelector` is used to wait on socket events:
48  it supports sockets and is limited to 512 sockets.
49
50* :meth:`loop.add_reader` and :meth:`loop.add_writer` only accept
51  socket handles (e.g. pipe file descriptors are not supported).
52
53* Pipes are not supported, so the :meth:`loop.connect_read_pipe`
54  and :meth:`loop.connect_write_pipe` methods are not implemented.
55
56* :ref:`Subprocesses <asyncio-subprocess>` are not supported, i.e.
57  :meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell`
58  methods are not implemented.
59
60:class:`ProactorEventLoop` has the following limitations:
61
62* The :meth:`loop.add_reader` and :meth:`loop.add_writer`
63  methods are not supported.
64
65The resolution of the monotonic clock on Windows is usually around 15.6
66msec.  The best resolution is 0.5 msec. The resolution depends on the
67hardware (availability of `HPET
68<https://en.wikipedia.org/wiki/High_Precision_Event_Timer>`_) and on the
69Windows configuration.
70
71
72.. _asyncio-windows-subprocess:
73
74Subprocess Support on Windows
75-----------------------------
76
77On Windows, the default event loop :class:`ProactorEventLoop` supports
78subprocesses, whereas :class:`SelectorEventLoop` does not.
79
80The :meth:`policy.set_child_watcher()
81<AbstractEventLoopPolicy.set_child_watcher>` function is also
82not supported, as :class:`ProactorEventLoop` has a different mechanism
83to watch child processes.
84
85
86macOS
87=====
88
89Modern macOS versions are fully supported.
90
91.. rubric:: macOS <= 10.8
92
93On macOS 10.6, 10.7 and 10.8, the default event loop
94uses :class:`selectors.KqueueSelector`, which does not support
95character devices on these versions.  The :class:`SelectorEventLoop`
96can be manually configured to use :class:`~selectors.SelectSelector`
97or :class:`~selectors.PollSelector` to support character devices on
98these older versions of macOS.  Example::
99
100    import asyncio
101    import selectors
102
103    selector = selectors.SelectSelector()
104    loop = asyncio.SelectorEventLoop(selector)
105    asyncio.set_event_loop(loop)
106