17db96d56Sopenharmony_ci:mod:`asyncio` --- Asynchronous I/O 27db96d56Sopenharmony_ci=================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: asyncio 57db96d56Sopenharmony_ci :synopsis: Asynchronous I/O. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci------------------------------- 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci.. sidebar:: Hello World! 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci :: 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci import asyncio 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci async def main(): 167db96d56Sopenharmony_ci print('Hello ...') 177db96d56Sopenharmony_ci await asyncio.sleep(1) 187db96d56Sopenharmony_ci print('... World!') 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ci asyncio.run(main()) 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ciasyncio is a library to write **concurrent** code using 237db96d56Sopenharmony_cithe **async/await** syntax. 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ciasyncio is used as a foundation for multiple Python asynchronous 267db96d56Sopenharmony_ciframeworks that provide high-performance network and web-servers, 277db96d56Sopenharmony_cidatabase connection libraries, distributed task queues, etc. 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ciasyncio is often a perfect fit for IO-bound and high-level 307db96d56Sopenharmony_ci**structured** network code. 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ciasyncio provides a set of **high-level** APIs to: 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci* :ref:`run Python coroutines <coroutine>` concurrently and 357db96d56Sopenharmony_ci have full control over their execution; 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci* perform :ref:`network IO and IPC <asyncio-streams>`; 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci* control :ref:`subprocesses <asyncio-subprocess>`; 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci* distribute tasks via :ref:`queues <asyncio-queues>`; 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci* :ref:`synchronize <asyncio-sync>` concurrent code; 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ciAdditionally, there are **low-level** APIs for 467db96d56Sopenharmony_ci*library and framework developers* to: 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci* create and manage :ref:`event loops <asyncio-event-loop>`, which 497db96d56Sopenharmony_ci provide asynchronous APIs for :meth:`networking <loop.create_server>`, 507db96d56Sopenharmony_ci running :meth:`subprocesses <loop.subprocess_exec>`, 517db96d56Sopenharmony_ci handling :meth:`OS signals <loop.add_signal_handler>`, etc; 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci* implement efficient protocols using 547db96d56Sopenharmony_ci :ref:`transports <asyncio-transports-protocols>`; 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci* :ref:`bridge <asyncio-futures>` callback-based libraries and code 577db96d56Sopenharmony_ci with async/await syntax. 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ciYou can experiment with an ``asyncio`` concurrent context in the REPL: 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ci.. code-block:: pycon 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci $ python -m asyncio 647db96d56Sopenharmony_ci asyncio REPL ... 657db96d56Sopenharmony_ci Use "await" directly instead of "asyncio.run()". 667db96d56Sopenharmony_ci Type "help", "copyright", "credits" or "license" for more information. 677db96d56Sopenharmony_ci >>> import asyncio 687db96d56Sopenharmony_ci >>> await asyncio.sleep(10, result='hello') 697db96d56Sopenharmony_ci 'hello' 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci.. We use the "rubric" directive here to avoid creating 747db96d56Sopenharmony_ci the "Reference" subsection in the TOC. 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci.. rubric:: Reference 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci.. toctree:: 797db96d56Sopenharmony_ci :caption: High-level APIs 807db96d56Sopenharmony_ci :maxdepth: 1 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_ci asyncio-runner.rst 837db96d56Sopenharmony_ci asyncio-task.rst 847db96d56Sopenharmony_ci asyncio-stream.rst 857db96d56Sopenharmony_ci asyncio-sync.rst 867db96d56Sopenharmony_ci asyncio-subprocess.rst 877db96d56Sopenharmony_ci asyncio-queue.rst 887db96d56Sopenharmony_ci asyncio-exceptions.rst 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci.. toctree:: 917db96d56Sopenharmony_ci :caption: Low-level APIs 927db96d56Sopenharmony_ci :maxdepth: 1 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci asyncio-eventloop.rst 957db96d56Sopenharmony_ci asyncio-future.rst 967db96d56Sopenharmony_ci asyncio-protocol.rst 977db96d56Sopenharmony_ci asyncio-policy.rst 987db96d56Sopenharmony_ci asyncio-platforms.rst 997db96d56Sopenharmony_ci asyncio-extending.rst 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci.. toctree:: 1027db96d56Sopenharmony_ci :caption: Guides and Tutorials 1037db96d56Sopenharmony_ci :maxdepth: 1 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci asyncio-api-index.rst 1067db96d56Sopenharmony_ci asyncio-llapi-index.rst 1077db96d56Sopenharmony_ci asyncio-dev.rst 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci.. note:: 1107db96d56Sopenharmony_ci The source code for asyncio can be found in :source:`Lib/asyncio/`. 111