blob: b8710830f220149eaae7b65c4ab57d033629de8f [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
153Event loop policy interface
154---------------------------
155
156An event loop policy must implement the following interface:
157
158.. class:: AbstractEventLoopPolicy
159
160 .. method:: get_event_loop()
161
162 Get the event loop for the current context. Returns an event loop object
163 implementing the :class:`BaseEventLoop` interface, or raises an exception in case
164 no event loop has been set for the current context and the current policy
165 does not specify to create one. It should never return ``None``.
166
167 .. method:: set_event_loop(loop)
168
169 Set the event loop for the current context to *loop*.
170
171 .. method:: new_event_loop()
172
173 Create and return a new event loop object according to this policy's rules.
174 If there's need to set this loop as the event loop for the current context,
175 :meth:`set_event_loop` must be called explicitly.
176
177Access to the global loop policy
178--------------------------------
179
180.. function:: get_event_loop_policy()
181
182 Get the current event loop policy.
183
184.. function:: set_event_loop_policy(policy)
185
186 Set the current event loop policy. If *policy* is ``None``, the default
187 policy is restored.
188