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