| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  | :mod:`asyncio` --- Asynchronous I/O
 | 
					
						
							|  |  |  | ===================================
 | 
					
						
							| 
									
										
										
										
											2013-11-22 11:47:22 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. module:: asyncio
 | 
					
						
							| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  |    :synopsis: Asynchronous I/O.
 | 
					
						
							| 
									
										
										
										
											2016-06-11 15:02:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-10 19:18:46 -04:00
										 |  |  | -------------------------------
 | 
					
						
							| 
									
										
										
										
											2013-11-22 11:47:22 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-17 18:41:59 -04:00
										 |  |  | .. sidebar:: Hello World!
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-18 02:47:54 -04:00
										 |  |  |    ::
 | 
					
						
							| 
									
										
										
										
											2018-09-17 18:41:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |        import asyncio
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        async def main():
 | 
					
						
							|  |  |  |            print('Hello ...')
 | 
					
						
							|  |  |  |            await asyncio.sleep(1)
 | 
					
						
							|  |  |  |            print('... World!')
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-18 17:55:44 -04:00
										 |  |  |        # Python 3.7+
 | 
					
						
							| 
									
										
										
										
											2018-09-17 18:41:59 -04:00
										 |  |  |        asyncio.run(main())
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | asyncio is a library to write **concurrent** code using
 | 
					
						
							| 
									
										
										
										
											2018-09-17 19:16:44 -04:00
										 |  |  | the **async/await** syntax.
 | 
					
						
							| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | asyncio is used as a foundation for multiple Python asynchronous
 | 
					
						
							|  |  |  | frameworks that provide high-performance network and web-servers,
 | 
					
						
							|  |  |  | database connection libraries, distributed task queues, etc.
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | asyncio is often a perfect fit for IO-bound and high-level
 | 
					
						
							|  |  |  | **structured** network code.
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | asyncio provides a set of **high-level** APIs to:
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | * :ref:`run Python coroutines <coroutine>` concurrently and
 | 
					
						
							|  |  |  |   have full control over their execution;
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | * perform :ref:`network IO and IPC <asyncio-streams>`;
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | * control :ref:`subprocesses <asyncio-subprocess>`;
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | * distribute tasks via :ref:`queues <asyncio-queues>`;
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | * :ref:`synchronize <asyncio-sync>` concurrent code;
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-17 19:16:44 -04:00
										 |  |  | Additionally, there are **low-level** APIs for
 | 
					
						
							|  |  |  | *library and framework developers* to:
 | 
					
						
							| 
									
										
										
										
											2013-11-22 15:45:02 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | * create and manage :ref:`event loops <asyncio-event-loop>`, which
 | 
					
						
							| 
									
										
										
										
											2018-09-14 16:57:11 -07:00
										 |  |  |   provide asynchronous APIs for :meth:`networking <loop.create_server>`,
 | 
					
						
							|  |  |  |   running :meth:`subprocesses <loop.subprocess_exec>`,
 | 
					
						
							|  |  |  |   handling :meth:`OS signals <loop.add_signal_handler>`, etc;
 | 
					
						
							| 
									
										
										
										
											2015-02-25 14:23:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | * implement efficient protocols using
 | 
					
						
							|  |  |  |   :ref:`transports <asyncio-transports-protocols>`;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * :ref:`bridge <asyncio-futures>` callback-based libraries and code
 | 
					
						
							|  |  |  |   with async/await syntax.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-17 15:35:24 -04:00
										 |  |  | .. We use the "rubric" directive here to avoid creating
 | 
					
						
							|  |  |  |    the "Reference" subsection in the TOC.
 | 
					
						
							| 
									
										
										
										
											2018-09-14 14:57:39 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-17 15:35:24 -04:00
										 |  |  | .. rubric:: Reference
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | .. toctree::
 | 
					
						
							| 
									
										
										
										
											2018-09-17 15:35:24 -04:00
										 |  |  |    :caption: High-level APIs
 | 
					
						
							| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  |    :maxdepth: 1
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-24 21:51:16 +02:00
										 |  |  |    asyncio-runner.rst
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  |    asyncio-task.rst
 | 
					
						
							| 
									
										
										
										
											2014-01-23 11:05:01 +01:00
										 |  |  |    asyncio-stream.rst
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  |    asyncio-sync.rst
 | 
					
						
							| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  |    asyncio-subprocess.rst
 | 
					
						
							| 
									
										
										
										
											2015-02-25 13:55:43 +01:00
										 |  |  |    asyncio-queue.rst
 | 
					
						
							| 
									
										
										
										
											2018-09-11 09:54:40 -07:00
										 |  |  |    asyncio-exceptions.rst
 | 
					
						
							| 
									
										
										
										
											2013-11-23 00:34:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  | .. toctree::
 | 
					
						
							| 
									
										
										
										
											2018-09-17 15:35:24 -04:00
										 |  |  |    :caption: Low-level APIs
 | 
					
						
							| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  |    :maxdepth: 1
 | 
					
						
							| 
									
										
										
										
											2013-12-03 15:04:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  |    asyncio-eventloop.rst
 | 
					
						
							|  |  |  |    asyncio-future.rst
 | 
					
						
							|  |  |  |    asyncio-protocol.rst
 | 
					
						
							|  |  |  |    asyncio-policy.rst
 | 
					
						
							|  |  |  |    asyncio-platforms.rst
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. toctree::
 | 
					
						
							| 
									
										
										
										
											2018-09-17 15:35:24 -04:00
										 |  |  |    :caption: Guides and Tutorials
 | 
					
						
							| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  |    :maxdepth: 1
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 15:11:24 -07:00
										 |  |  |    asyncio-api-index.rst
 | 
					
						
							| 
									
										
										
										
											2018-09-17 15:35:24 -04:00
										 |  |  |    asyncio-llapi-index.rst
 | 
					
						
							| 
									
										
										
										
											2018-09-14 13:32:07 -07:00
										 |  |  |    asyncio-dev.rst
 | 
					
						
							| 
									
										
										
										
											2019-10-10 19:18:46 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. note::
 | 
					
						
							|  |  |  |    The source code for asyncio can be found in :source:`Lib/asyncio/`.
 |