| 
									
										
										
										
											2018-09-11 09:54:40 -07:00
										 |  |  | .. currentmodule:: asyncio
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. _asyncio-platform-support:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-17 19:16:44 -04:00
										 |  |  | ================
 | 
					
						
							|  |  |  | Platform Support
 | 
					
						
							|  |  |  | ================
 | 
					
						
							| 
									
										
										
										
											2018-09-11 09:54:40 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-17 19:16:44 -04:00
										 |  |  | The :mod:`asyncio` module is designed to be portable,
 | 
					
						
							| 
									
										
										
										
											2018-09-13 16:14:41 -07:00
										 |  |  | but some platforms have subtle differences and limitations
 | 
					
						
							|  |  |  | due to the platforms' underlying architecture and capabilities.
 | 
					
						
							| 
									
										
										
										
											2018-09-11 09:54:40 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | All Platforms
 | 
					
						
							|  |  |  | =============
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * :meth:`loop.add_reader` and :meth:`loop.add_writer`
 | 
					
						
							| 
									
										
										
										
											2018-09-17 19:16:44 -04:00
										 |  |  |   cannot be used to monitor file I/O.
 | 
					
						
							| 
									
										
										
										
											2018-09-11 09:54:40 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Windows
 | 
					
						
							|  |  |  | =======
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-10 19:18:46 -04:00
										 |  |  | **Source code:** :source:`Lib/asyncio/proactor_events.py`,
 | 
					
						
							|  |  |  | :source:`Lib/asyncio/windows_events.py`,
 | 
					
						
							|  |  |  | :source:`Lib/asyncio/windows_utils.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-25 08:27:08 -07:00
										 |  |  | .. versionchanged:: 3.8
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    On Windows, :class:`ProactorEventLoop` is now the default event loop.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 09:54:40 -07: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.
 | 
					
						
							| 
									
										
										
										
											2023-07-21 12:40:37 +03:00
										 |  |  |   The :const:`socket.AF_UNIX` socket family is specific to Unix.
 | 
					
						
							| 
									
										
										
										
											2018-09-11 09:54:40 -07: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 12:09:56 +03:00
										 |  |  | milliseconds.  The best resolution is 0.5 milliseconds. The resolution depends on the
 | 
					
						
							| 
									
										
										
										
											2018-09-11 09:54:40 -07: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 08:27:08 -07:00
										 |  |  | On Windows, the default event loop :class:`ProactorEventLoop` supports
 | 
					
						
							|  |  |  | subprocesses, whereas :class:`SelectorEventLoop` does not.
 | 
					
						
							| 
									
										
										
										
											2018-09-11 09:54:40 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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)
 |