blob: e891ed1711b15278699c679dc52d8aa1736af8f9 [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 Stinner41f3c3f2014-08-31 14:47:37 +020090- :class:`~selectors.SelectSelector` is used but it only supports sockets
Victor Stinneraea82292014-07-08 23:42:38 +020091- :meth:`~BaseEventLoop.add_reader` and :meth:`~BaseEventLoop.add_writer` only
92 accept file descriptors of sockets
Victor Stinner778015b2014-07-11 12:13:39 +020093- Pipes are not supported
94 (ex: :meth:`~BaseEventLoop.connect_read_pipe`,
95 :meth:`~BaseEventLoop.connect_write_pipe`)
96- :ref:`Subprocesses <asyncio-subprocess>` are not supported
97 (ex: :meth:`~BaseEventLoop.subprocess_exec`,
98 :meth:`~BaseEventLoop.subprocess_shell`)
Victor Stinneraea82292014-07-08 23:42:38 +020099
100:class:`ProactorEventLoop` specific limits:
101
102- SSL is not supported: :meth:`~BaseEventLoop.create_connection` and
103 :meth:`~BaseEventLoop.create_server` cannot be used with SSL for example
104- :meth:`~BaseEventLoop.create_datagram_endpoint` (UDP) is not supported
105- :meth:`~BaseEventLoop.add_reader` and :meth:`~BaseEventLoop.add_writer` are
106 not supported
107
108The resolution of the monotonic clock on Windows is usually around 15.6 msec.
Victor Stinner778015b2014-07-11 12:13:39 +0200109The best resolution is 0.5 msec. The resolution depends on the hardware
110(availability of `HPET
111<http://fr.wikipedia.org/wiki/High_Precision_Event_Timer>`_) and on the Windows
112configuration. See :ref:`asyncio delayed calls <asyncio-delayed-calls>`.
Victor Stinneraea82292014-07-08 23:42:38 +0200113
114
115Mac OS X
116^^^^^^^^
117
118Character devices like PTY are only well supported since Mavericks (Mac OS
11910.9). They are not supported at all on Mac OS 10.5 and older.
120
121On Mac OS 10.6, 10.7 and 10.8, the default event loop is
122:class:`SelectorEventLoop` which uses :class:`selectors.KqueueSelector`.
123:class:`selectors.KqueueSelector` does not support character devices on these
124versions. The :class:`SelectorEventLoop` can be used with
125:class:`~selectors.SelectSelector` or :class:`~selectors.PollSelector` to
126support character devices on these versions of Mac OS X. Example::
127
128 import asyncio
129 import selectors
130
131 selector = selectors.SelectSelector()
132 loop = asyncio.SelectorEventLoop(selector)
133 asyncio.set_event_loop(loop)
134
135
136Event loop policies and the default policy
137------------------------------------------
138
139Event loop management is abstracted with a *policy* pattern, to provide maximal
140flexibility for custom platforms and frameworks. Throughout the execution of a
141process, a single global policy object manages the event loops available to the
142process based on the calling context. A policy is an object implementing the
143:class:`AbstractEventLoopPolicy` interface.
144
145For most users of :mod:`asyncio`, policies never have to be dealt with
146explicitly, since the default global policy is sufficient.
147
148The default policy defines context as the current thread, and manages an event
149loop per thread that interacts with :mod:`asyncio`. The module-level functions
150:func:`get_event_loop` and :func:`set_event_loop` provide convenient access to
151event loops managed by the default policy.
152
Victor Stinner1deee542014-11-28 13:58:28 +0100153
Victor Stinneraea82292014-07-08 23:42:38 +0200154Event loop policy interface
155---------------------------
156
157An event loop policy must implement the following interface:
158
159.. class:: AbstractEventLoopPolicy
160
Victor Stinner1deee542014-11-28 13:58:28 +0100161 Event loop policy.
162
Victor Stinneraea82292014-07-08 23:42:38 +0200163 .. method:: get_event_loop()
164
Victor Stinner1deee542014-11-28 13:58:28 +0100165 Get the event loop for the current context.
166
167 Returns an event loop object implementing the :class:`BaseEventLoop`
168 interface.
169
170 Raises an exception in case no event loop has been set for the current
171 context and the current policy does not specify to create one. It must
172 never return ``None``.
Victor Stinneraea82292014-07-08 23:42:38 +0200173
174 .. method:: set_event_loop(loop)
175
Victor Stinner1deee542014-11-28 13:58:28 +0100176 Set the event loop for the current context to *loop*.
Victor Stinneraea82292014-07-08 23:42:38 +0200177
178 .. method:: new_event_loop()
179
Victor Stinner1deee542014-11-28 13:58:28 +0100180 Create and return a new event loop object according to this policy's
181 rules.
182
183 If there's need to set this loop as the event loop for the current
184 context, :meth:`set_event_loop` must be called explicitly.
185
Victor Stinneraea82292014-07-08 23:42:38 +0200186
187Access to the global loop policy
188--------------------------------
189
190.. function:: get_event_loop_policy()
191
192 Get the current event loop policy.
193
194.. function:: set_event_loop_policy(policy)
195
196 Set the current event loop policy. If *policy* is ``None``, the default
197 policy is restored.
198