blob: afb8b9f35b447f253b1247216cf2335644cc26ce [file] [log] [blame]
Victor Stinneraea82292014-07-08 23:42:38 +02001.. currentmodule:: asyncio
2
3Event loops
4===========
5
6Event loop functions
7--------------------
8
9The following functions are convenient shortcuts to accessing the methods of the
10global policy. Note that this provides access to the default policy, unless an
11alternative policy was set by calling :func:`set_event_loop_policy` earlier in
12the execution of the process.
13
14.. function:: get_event_loop()
15
16 Equivalent to calling ``get_event_loop_policy().get_event_loop()``.
17
18.. function:: set_event_loop(loop)
19
20 Equivalent to calling ``get_event_loop_policy().set_event_loop(loop)``.
21
22.. function:: new_event_loop()
23
24 Equivalent to calling ``get_event_loop_policy().new_event_loop()``.
25
26
Victor Stinner778015b2014-07-11 12:13:39 +020027.. _asyncio-event-loops:
28
Victor Stinneraea82292014-07-08 23:42:38 +020029Available event loops
30---------------------
31
32asyncio currently provides two implementations of event loops:
33:class:`SelectorEventLoop` and :class:`ProactorEventLoop`.
34
35.. class:: SelectorEventLoop
36
37 Event loop based on the :mod:`selectors` module. Subclass of
38 :class:`BaseEventLoop`.
39
40 Use the most efficient selector available on the platform.
41
Victor Stinner41f3c3f2014-08-31 14:47:37 +020042 On Windows, only sockets are supported (ex: pipes are not supported):
43 see the `MSDN documentation of select
44 <http://msdn.microsoft.com/en-us/library/windows/desktop/ms740141%28v=vs.85%29.aspx>`_.
45
Victor Stinneraea82292014-07-08 23:42:38 +020046.. class:: ProactorEventLoop
47
48 Proactor event loop for Windows using "I/O Completion Ports" aka IOCP.
49 Subclass of :class:`BaseEventLoop`.
50
51 Availability: Windows.
52
53 .. seealso::
54
55 `MSDN documentation on I/O Completion Ports
56 <http://msdn.microsoft.com/en-us/library/windows/desktop/aa365198%28v=vs.85%29.aspx>`_.
57
58Example to use a :class:`ProactorEventLoop` on Windows::
59
60 import asyncio, os
61
62 if os.name == 'nt':
63 loop = asyncio.ProactorEventLoop()
64 asyncio.set_event_loop(loop)
65
Victor Stinner778015b2014-07-11 12:13:39 +020066.. _asyncio-platform-support:
Victor Stinneraea82292014-07-08 23:42:38 +020067
68Platform support
69----------------
70
71The :mod:`asyncio` module has been designed to be portable, but each platform
72still has subtle differences and may not support all :mod:`asyncio` features.
73
74Windows
75^^^^^^^
76
77Common limits of Windows event loops:
78
Victor Stinner33f6abe2014-10-12 20:36:04 +020079- :meth:`~BaseEventLoop.create_unix_connection` and
Victor Stinner778015b2014-07-11 12:13:39 +020080 :meth:`~BaseEventLoop.create_unix_server` are not supported: the socket
81 family :data:`socket.AF_UNIX` is specific to UNIX
Victor Stinneraea82292014-07-08 23:42:38 +020082- :meth:`~BaseEventLoop.add_signal_handler` and
83 :meth:`~BaseEventLoop.remove_signal_handler` are not supported
Victor Stinner778015b2014-07-11 12:13:39 +020084- :meth:`EventLoopPolicy.set_child_watcher` is not supported.
85 :class:`ProactorEventLoop` supports subprocesses. It has only one
86 implementation to watch child processes, there is no need to configure it.
Victor Stinneraea82292014-07-08 23:42:38 +020087
88:class:`SelectorEventLoop` specific limits:
89
Victor Stinner7eb10312015-01-09 15:59:44 +010090- :class:`~selectors.SelectSelector` is used which only supports sockets
91 and is limited to 512 sockets.
Victor Stinneraea82292014-07-08 23:42:38 +020092- :meth:`~BaseEventLoop.add_reader` and :meth:`~BaseEventLoop.add_writer` only
93 accept file descriptors of sockets
Victor Stinner778015b2014-07-11 12:13:39 +020094- Pipes are not supported
95 (ex: :meth:`~BaseEventLoop.connect_read_pipe`,
96 :meth:`~BaseEventLoop.connect_write_pipe`)
97- :ref:`Subprocesses <asyncio-subprocess>` are not supported
98 (ex: :meth:`~BaseEventLoop.subprocess_exec`,
99 :meth:`~BaseEventLoop.subprocess_shell`)
Victor Stinneraea82292014-07-08 23:42:38 +0200100
101:class:`ProactorEventLoop` specific limits:
102
103- SSL is not supported: :meth:`~BaseEventLoop.create_connection` and
104 :meth:`~BaseEventLoop.create_server` cannot be used with SSL for example
105- :meth:`~BaseEventLoop.create_datagram_endpoint` (UDP) is not supported
106- :meth:`~BaseEventLoop.add_reader` and :meth:`~BaseEventLoop.add_writer` are
107 not supported
108
109The resolution of the monotonic clock on Windows is usually around 15.6 msec.
Victor Stinner778015b2014-07-11 12:13:39 +0200110The best resolution is 0.5 msec. The resolution depends on the hardware
111(availability of `HPET
112<http://fr.wikipedia.org/wiki/High_Precision_Event_Timer>`_) and on the Windows
113configuration. See :ref:`asyncio delayed calls <asyncio-delayed-calls>`.
Victor Stinneraea82292014-07-08 23:42:38 +0200114
115
116Mac OS X
117^^^^^^^^
118
119Character devices like PTY are only well supported since Mavericks (Mac OS
12010.9). They are not supported at all on Mac OS 10.5 and older.
121
122On Mac OS 10.6, 10.7 and 10.8, the default event loop is
123:class:`SelectorEventLoop` which uses :class:`selectors.KqueueSelector`.
124:class:`selectors.KqueueSelector` does not support character devices on these
125versions. The :class:`SelectorEventLoop` can be used with
126:class:`~selectors.SelectSelector` or :class:`~selectors.PollSelector` to
127support character devices on these versions of Mac OS X. Example::
128
129 import asyncio
130 import selectors
131
132 selector = selectors.SelectSelector()
133 loop = asyncio.SelectorEventLoop(selector)
134 asyncio.set_event_loop(loop)
135
136
137Event loop policies and the default policy
138------------------------------------------
139
140Event loop management is abstracted with a *policy* pattern, to provide maximal
141flexibility for custom platforms and frameworks. Throughout the execution of a
142process, a single global policy object manages the event loops available to the
143process based on the calling context. A policy is an object implementing the
144:class:`AbstractEventLoopPolicy` interface.
145
146For most users of :mod:`asyncio`, policies never have to be dealt with
147explicitly, since the default global policy is sufficient.
148
149The default policy defines context as the current thread, and manages an event
150loop per thread that interacts with :mod:`asyncio`. The module-level functions
151:func:`get_event_loop` and :func:`set_event_loop` provide convenient access to
152event loops managed by the default policy.
153
Victor Stinner1deee542014-11-28 13:58:28 +0100154
Victor Stinneraea82292014-07-08 23:42:38 +0200155Event loop policy interface
156---------------------------
157
158An event loop policy must implement the following interface:
159
160.. class:: AbstractEventLoopPolicy
161
Victor Stinner1deee542014-11-28 13:58:28 +0100162 Event loop policy.
163
Victor Stinneraea82292014-07-08 23:42:38 +0200164 .. method:: get_event_loop()
165
Victor Stinner1deee542014-11-28 13:58:28 +0100166 Get the event loop for the current context.
167
168 Returns an event loop object implementing the :class:`BaseEventLoop`
169 interface.
170
171 Raises an exception in case no event loop has been set for the current
172 context and the current policy does not specify to create one. It must
173 never return ``None``.
Victor Stinneraea82292014-07-08 23:42:38 +0200174
175 .. method:: set_event_loop(loop)
176
Victor Stinner1deee542014-11-28 13:58:28 +0100177 Set the event loop for the current context to *loop*.
Victor Stinneraea82292014-07-08 23:42:38 +0200178
179 .. method:: new_event_loop()
180
Victor Stinner1deee542014-11-28 13:58:28 +0100181 Create and return a new event loop object according to this policy's
182 rules.
183
184 If there's need to set this loop as the event loop for the current
185 context, :meth:`set_event_loop` must be called explicitly.
186
Victor Stinneraea82292014-07-08 23:42:38 +0200187
188Access to the global loop policy
189--------------------------------
190
191.. function:: get_event_loop_policy()
192
193 Get the current event loop policy.
194
195.. function:: set_event_loop_policy(policy)
196
197 Set the current event loop policy. If *policy* is ``None``, the default
198 policy is restored.
199