blob: 0ab322af6dc72da6ccf63da0c10927821029a823 [file] [log] [blame]
Yury Selivanov394374e2018-09-17 15:35:24 -04001.. currentmodule:: asyncio
2
3
4===================
5Low-level API Index
6===================
7
8This page lists all low-level asyncio APIs.
9
10
11Obtaining the Event Loop
12========================
13
14.. list-table::
15 :widths: 50 50
16 :class: full-width-table
17
18 * - :func:`asyncio.get_running_loop`
19 - The **preferred** function to get the running event loop.
20
21 * - :func:`asyncio.get_event_loop`
22 - Get an event loop instance (current or via the policy).
23
24 * - :func:`asyncio.set_event_loop`
25 - Set the event loop as current via the current policy.
26
27 * - :func:`asyncio.new_event_loop`
28 - Create a new event loop.
29
30
31.. rubric:: Examples
32
33* :ref:`Using asyncio.get_running_loop() <asyncio_example_future>`.
34
35
36Event Loop Methods
37==================
38
39See also the main documentation section about the
40:ref:`event loop methods <asyncio-event-loop>`.
41
42.. rubric:: Lifecycle
43.. list-table::
44 :widths: 50 50
45 :class: full-width-table
46
47 * - :meth:`loop.run_until_complete`
48 - Run a Future/Task/awaitable until complete.
49
50 * - :meth:`loop.run_forever`
51 - Run the event loop forever.
52
53 * - :meth:`loop.stop`
54 - Stop the event loop.
55
Yury Selivanovffef50f2018-09-20 01:17:09 -040056 * - :meth:`loop.close`
Yury Selivanov394374e2018-09-17 15:35:24 -040057 - Close the event loop.
58
59 * - :meth:`loop.is_running()`
60 - Return ``True`` if the event loop is running.
61
62 * - :meth:`loop.is_closed()`
63 - Return ``True`` if the event loop is closed.
64
65 * - ``await`` :meth:`loop.shutdown_asyncgens`
66 - Close asynchronous generators.
67
68
69.. rubric:: Debugging
70.. list-table::
71 :widths: 50 50
72 :class: full-width-table
73
74 * - :meth:`loop.set_debug`
75 - Enable or disable the debug mode.
76
77 * - :meth:`loop.get_debug`
78 - Get the current debug mode.
79
80
81.. rubric:: Scheduling Callbacks
82.. list-table::
83 :widths: 50 50
84 :class: full-width-table
85
86 * - :meth:`loop.call_soon`
87 - Invoke a callback soon.
88
89 * - :meth:`loop.call_soon_threadsafe`
90 - A thread-safe variant of :meth:`loop.call_soon`.
91
92 * - :meth:`loop.call_later`
93 - Invoke a callback *after* the given time.
94
95 * - :meth:`loop.call_at`
96 - Invoke a callback *at* the given time.
97
98
99.. rubric:: Thread/Process Pool
100.. list-table::
101 :widths: 50 50
102 :class: full-width-table
103
104 * - ``await`` :meth:`loop.run_in_executor`
105 - Run a CPU-bound or other blocking function in
106 a :mod:`concurrent.futures` executor.
107
108 * - :meth:`loop.set_default_executor`
109 - Set the default executor for :meth:`loop.run_in_executor`.
110
111
112.. rubric:: Tasks and Futures
113.. list-table::
114 :widths: 50 50
115 :class: full-width-table
116
117 * - :meth:`loop.create_future`
118 - Create a :class:`Future` object.
119
120 * - :meth:`loop.create_task`
121 - Schedule coroutine as a :class:`Task`.
122
123 * - :meth:`loop.set_task_factory`
124 - Set a factory used by :meth:`loop.create_task` to
125 create :class:`Tasks <Task>`.
126
127 * - :meth:`loop.get_task_factory`
128 - Get the factory :meth:`loop.create_task` uses
129 to create :class:`Tasks <Task>`.
130
131
132.. rubric:: DNS
133.. list-table::
134 :widths: 50 50
135 :class: full-width-table
136
137 * - ``await`` :meth:`loop.getaddrinfo`
138 - Asynchronous version of :meth:`socket.getaddrinfo`.
139
140 * - ``await`` :meth:`loop.getnameinfo`
141 - Asynchronous version of :meth:`socket.getnameinfo`.
142
143
144.. rubric:: Networking and IPC
145.. list-table::
146 :widths: 50 50
147 :class: full-width-table
148
149 * - ``await`` :meth:`loop.create_connection`
150 - Open a TCP connection.
151
152 * - ``await`` :meth:`loop.create_server`
153 - Create a TCP server.
154
155 * - ``await`` :meth:`loop.create_unix_connection`
156 - Open a Unix socket connection.
157
158 * - ``await`` :meth:`loop.create_unix_server`
159 - Create a Unix socket server.
160
161 * - ``await`` :meth:`loop.connect_accepted_socket`
162 - Wrap a :class:`~socket.socket` into a ``(transport, protocol)``
163 pair.
164
165 * - ``await`` :meth:`loop.create_datagram_endpoint`
166 - Open a datagram (UDP) connection.
167
168 * - ``await`` :meth:`loop.sendfile`
169 - Send a file over a transport.
170
171 * - ``await`` :meth:`loop.start_tls`
172 - Upgrade an existing connection to TLS.
173
174 * - ``await`` :meth:`loop.connect_read_pipe`
175 - Wrap a read end of a pipe into a ``(transport, protocol)`` pair.
176
177 * - ``await`` :meth:`loop.connect_write_pipe`
178 - Wrap a write end of a pipe into a ``(transport, protocol)`` pair.
179
180
181.. rubric:: Sockets
182.. list-table::
183 :widths: 50 50
184 :class: full-width-table
185
186 * - ``await`` :meth:`loop.sock_recv`
187 - Receive data from the :class:`~socket.socket`.
188
189 * - ``await`` :meth:`loop.sock_recv_into`
190 - Receive data from the :class:`~socket.socket` into a buffer.
191
192 * - ``await`` :meth:`loop.sock_sendall`
193 - Send data to the :class:`~socket.socket`.
194
195 * - ``await`` :meth:`loop.sock_connect`
196 - Connect the :class:`~socket.socket`.
197
198 * - ``await`` :meth:`loop.sock_accept`
199 - Accept a :class:`~socket.socket` connection.
200
201 * - ``await`` :meth:`loop.sock_sendfile`
202 - Send a file over the :class:`~socket.socket`.
203
204 * - :meth:`loop.add_reader`
205 - Start watching a file descriptor for read availability.
206
207 * - :meth:`loop.remove_reader`
208 - Stop watching a file descriptor for read availability.
209
210 * - :meth:`loop.add_writer`
211 - Start watching a file descriptor for write availability.
212
213 * - :meth:`loop.remove_writer`
214 - Stop watching a file descriptor for write availability.
215
216
217.. rubric:: Unix Signals
218.. list-table::
219 :widths: 50 50
220 :class: full-width-table
221
222 * - :meth:`loop.add_signal_handler`
223 - Add a handler for a :mod:`signal`.
224
225 * - :meth:`loop.remove_signal_handler`
226 - Remove a handler for a :mod:`signal`.
227
228
229.. rubric:: Subprocesses
230.. list-table::
231 :widths: 50 50
232 :class: full-width-table
233
234 * - :meth:`loop.subprocess_exec`
235 - Spawn a subprocess.
236
237 * - :meth:`loop.subprocess_shell`
238 - Spawn a subprocess from a shell command.
239
240
241.. rubric:: Error Handling
242.. list-table::
243 :widths: 50 50
244 :class: full-width-table
245
246 * - :meth:`loop.call_exception_handler`
247 - Call the exception handler.
248
249 * - :meth:`loop.set_exception_handler`
250 - Set a new exception handler.
251
252 * - :meth:`loop.get_exception_handler`
253 - Get the current exception handler.
254
255 * - :meth:`loop.default_exception_handler`
256 - The default exception handler implementation.
257
258
259.. rubric:: Examples
260
261* :ref:`Using asyncio.get_event_loop() and loop.run_forever()
262 <asyncio_example_lowlevel_helloworld>`.
263
264* :ref:`Using loop.call_later() <asyncio_example_call_later>`.
265
266* Using ``loop.create_connection()`` to implement
267 :ref:`an echo-client <asyncio_example_tcp_echo_client_protocol>`.
268
269* Using ``loop.create_connection()`` to
270 :ref:`connect a socket <asyncio_example_create_connection>`.
271
272* :ref:`Using add_reader() to watch an FD for read events
273 <asyncio_example_watch_fd>`.
274
275* :ref:`Using loop.add_signal_handler() <asyncio_example_unix_signals>`.
276
277* :ref:`Using loop.subprocess_exec() <asyncio_example_subprocess_proto>`.
278
279
280Transports
281==========
282
283All transports implement the following methods:
284
285.. list-table::
286 :widths: 50 50
287 :class: full-width-table
288
289 * - :meth:`transport.close() <BaseTransport.close>`
290 - Close the transport.
291
292 * - :meth:`transport.is_closing() <BaseTransport.is_closing>`
293 - Return ``True`` if the transport is closing or is closed.
294
295 * - :meth:`transport.get_extra_info() <BaseTransport.get_extra_info>`
296 - Request for information about the transport.
297
298 * - :meth:`transport.set_protocol() <BaseTransport.set_protocol>`
299 - Set a new protocol.
300
301 * - :meth:`transport.get_protocol() <BaseTransport.get_protocol>`
302 - Return the current protocol.
303
304
305Transports that can receive data (TCP and Unix connections,
306pipes, etc). Returned from methods like
307:meth:`loop.create_connection`, :meth:`loop.create_unix_connection`,
308:meth:`loop.connect_read_pipe`, etc:
309
310.. rubric:: Read Transports
311.. list-table::
312 :widths: 50 50
313 :class: full-width-table
314
315 * - :meth:`transport.is_reading() <ReadTransport.is_reading>`
316 - Return ``True`` if the transport is receiving.
317
318 * - :meth:`transport.pause_reading() <ReadTransport.pause_reading>`
319 - Pause receiving.
320
321 * - :meth:`transport.resume_reading() <ReadTransport.resume_reading>`
322 - Resume receiving.
323
324
325Transports that can Send data (TCP and Unix connections,
326pipes, etc). Returned from methods like
327:meth:`loop.create_connection`, :meth:`loop.create_unix_connection`,
328:meth:`loop.connect_write_pipe`, etc:
329
330.. rubric:: Write Transports
331.. list-table::
332 :widths: 50 50
333 :class: full-width-table
334
335 * - :meth:`transport.write() <WriteTransport.write>`
336 - Write data to the transport.
337
338 * - :meth:`transport.writelines() <WriteTransport.writelines>`
339 - Write buffers to the transport.
340
341 * - :meth:`transport.can_write_eof() <WriteTransport.can_write_eof>`
342 - Return :const:`True` if the transport supports sending EOF.
343
344 * - :meth:`transport.write_eof() <WriteTransport.write_eof>`
345 - Close and send EOF after flushing buffered data.
346
347 * - :meth:`transport.abort() <WriteTransport.abort>`
348 - Close the transport immediately.
349
350 * - :meth:`transport.get_write_buffer_size()
351 <WriteTransport.get_write_buffer_size>`
352 - Return high and low water marks for write flow control.
353
354 * - :meth:`transport.set_write_buffer_limits()
355 <WriteTransport.set_write_buffer_limits>`
356 - Set new high and low water marks for write flow control.
357
358
359Transports returned by :meth:`loop.create_datagram_endpoint`:
360
361.. rubric:: Datagram Transports
362.. list-table::
363 :widths: 50 50
364 :class: full-width-table
365
366 * - :meth:`transport.sendto() <DatagramTransport.sendto>`
367 - Send data to the remote peer.
368
369 * - :meth:`transport.abort() <DatagramTransport.abort>`
370 - Close the transport immediately.
371
372
373Low-level transport abstraction over subprocesses.
374Returned by :meth:`loop.subprocess_exec` and
375:meth:`loop.subprocess_shell`:
376
377.. rubric:: Subprocess Transports
378.. list-table::
379 :widths: 50 50
380 :class: full-width-table
381
382 * - :meth:`transport.get_pid() <SubprocessTransport.get_pid>`
383 - Return the subprocess process id.
384
385 * - :meth:`transport.get_pipe_transport()
386 <SubprocessTransport.get_pipe_transport>`
387 - Return the transport for the requested communication pipe
388 (*stdin*, *stdout*, or *stderr*).
389
390 * - :meth:`transport.get_returncode() <SubprocessTransport.get_returncode>`
391 - Return the subprocess return code.
392
393 * - :meth:`transport.kill() <SubprocessTransport.kill>`
394 - Kill the subprocess.
395
396 * - :meth:`transport.send_signal() <SubprocessTransport.send_signal>`
397 - Send a signal to the subprocess.
398
399 * - :meth:`transport.terminate() <SubprocessTransport.terminate>`
400 - Stop the subprocess.
401
402 * - :meth:`transport.close() <SubprocessTransport.close>`
403 - Kill the subprocess and close all pipes.
404
405
406Protocols
407=========
408
409Protocol classes can implement the following **callback methods**:
410
411.. list-table::
412 :widths: 50 50
413 :class: full-width-table
414
415 * - ``callback`` :meth:`connection_made() <BaseProtocol.connection_made>`
416 - Called when a connection is made.
417
418 * - ``callback`` :meth:`connection_lost() <BaseProtocol.connection_lost>`
419 - Called when the connection is lost or closed.
420
421 * - ``callback`` :meth:`pause_writing() <BaseProtocol.pause_writing>`
422 - Called when the transport's buffer goes over the high water mark.
423
424 * - ``callback`` :meth:`resume_writing() <BaseProtocol.resume_writing>`
425 - Called when the transport's buffer drains below the low water mark.
426
427
428.. rubric:: Streaming Protocols (TCP, Unix Sockets, Pipes)
429.. list-table::
430 :widths: 50 50
431 :class: full-width-table
432
433 * - ``callback`` :meth:`data_received() <Protocol.data_received>`
434 - Called when some data is received.
435
436 * - ``callback`` :meth:`eof_received() <Protocol.eof_received>`
437 - Called when an EOF is received.
438
439
440.. rubric:: Buffered Streaming Protocols
441.. list-table::
442 :widths: 50 50
443 :class: full-width-table
444
445 * - ``callback`` :meth:`get_buffer() <BufferedProtocol.get_buffer>`
446 - Called to allocate a new receive buffer.
447
448 * - ``callback`` :meth:`buffer_updated() <BufferedProtocol.buffer_updated>`
449 - Called when the buffer was updated with the received data.
450
451 * - ``callback`` :meth:`eof_received() <BufferedProtocol.eof_received>`
452 - Called when an EOF is received.
453
454
455.. rubric:: Datagram Protocols
456.. list-table::
457 :widths: 50 50
458 :class: full-width-table
459
460 * - ``callback`` :meth:`datagram_received()
461 <DatagramProtocol.datagram_received>`
462 - Called when a datagram is received.
463
464 * - ``callback`` :meth:`error_received() <DatagramProtocol.error_received>`
465 - Called when a previous send or receive operation raises an
466 :class:`OSError`.
467
468
469.. rubric:: Subprocess Protocols
470.. list-table::
471 :widths: 50 50
472 :class: full-width-table
473
474 * - ``callback`` :meth:`pipe_data_received()
475 <SubprocessProtocol.pipe_data_received>`
476 - Called when the child process writes data into its
477 *stdout* or *stderr* pipe.
478
479 * - ``callback`` :meth:`pipe_connection_lost()
480 <SubprocessProtocol.pipe_connection_lost>`
481 - Called when one of the pipes communicating with
482 the child process is closed.
483
484 * - ``callback`` :meth:`process_exited()
485 <SubprocessProtocol.process_exited>`
486 - Called when the child process has exited.
487
488
489Event Loop Policies
490===================
491
492Policies is a low-level mechanism to alter the behavior of
493functions like :func:`asyncio.get_event_loop`. See also
494the main :ref:`policies section <asyncio-policies>` for more
495details.
496
497
498.. rubric:: Accessing Policies
499.. list-table::
500 :widths: 50 50
501 :class: full-width-table
502
503 * - :meth:`asyncio.get_event_loop_policy`
504 - Return the current process-wide policy.
505
506 * - :meth:`asyncio.set_event_loop_policy`
507 - Set a new process-wide policy.
508
509 * - :class:`AbstractEventLoopPolicy`
510 - Base class for policy objects.