From c9b4fb10d369d68eafd3f4967aef04cd46d78d78 Mon Sep 17 00:00:00 2001 From: medusa Date: Thu, 28 Mar 2024 18:34:44 +0000 Subject: [PATCH] Add docs/tech_docs/python/asyncio.md --- docs/tech_docs/python/asyncio.md | 94 ++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 docs/tech_docs/python/asyncio.md diff --git a/docs/tech_docs/python/asyncio.md b/docs/tech_docs/python/asyncio.md new file mode 100644 index 0000000..420d727 --- /dev/null +++ b/docs/tech_docs/python/asyncio.md @@ -0,0 +1,94 @@ +For asynchronous programming in Python, `asyncio` stands out as a vital library. It provides a framework that revolves around writing concurrent code using the async/await syntax introduced in Python 3.5. `asyncio` is used for developing server-side applications, database connection libraries, and speed enhancements in web frameworks. Here's a concise reference guide for common use cases with `asyncio`, aiding in understanding and implementing asynchronous programming: + +# `asyncio` Reference Guide + +## Installation +`asyncio` is included in the standard library of Python 3.5 and later, so no additional installation is necessary. + +## Basic Usage + +### Importing asyncio +```python +import asyncio +``` + +### Running an Async Function +```python +async def main(): + print('Hello') + await asyncio.sleep(1) + print('World') + +# Python 3.7+ +asyncio.run(main()) +``` + +### Creating Tasks +```python +async def say_after(delay, what): + await asyncio.sleep(delay) + print(what) + +async def main(): + task1 = asyncio.create_task(say_after(1, 'hello')) + task2 = asyncio.create_task(say_after(2, 'world')) + + print('Started tasks') + # Wait until both tasks are completed + await task1 + await task2 + +asyncio.run(main()) +``` + +### Waiting with `asyncio.gather` +```python +async def main(): + # Schedule three calls concurrently + await asyncio.gather( + say_after(1, 'hello'), + say_after(2, 'world'), + say_after(3, '!') + ) + +asyncio.run(main()) +``` + +## Working with I/O Operations + +### Using asyncio for Asynchronous I/O +`asyncio` provides support for asynchronous I/O operations, such as reading and writing to files, network requests, and database operations, using the `aiohttp` library for HTTP requests, for example. + +### Example: Asynchronous HTTP Requests +```python +import aiohttp + +async def fetch(url): + async with aiohttp.ClientSession() as session: + async with session.get(url) as response: + return await response.text() + +async def main(): + html = await fetch('http://python.org') + print(html[:100]) + +asyncio.run(main()) +``` + +## Event Loop + +### Understanding the Event Loop +The event loop is the core of `asyncio` applications, handling execution of asynchronous tasks, callbacks, and I/O events. Use `asyncio.run()` to run the top-level entry point “main()” function. + +### Managing the Event Loop Manually +For fine-grained control over the event loop, you can manage it manually, which is more common in complex applications and libraries. + +```python +loop = asyncio.get_event_loop() +try: + loop.run_until_complete(main()) +finally: + loop.close() +``` + +`asyncio` makes it easier to write and manage asynchronous code, facilitating the development of efficient and scalable applications, especially for I/O-bound and high-level structured network code. It's a powerful tool in the Python standard library, enabling developers to leverage asynchronous programming patterns for improved performance. \ No newline at end of file