Освоение асинхронного программирования на Python с помощью async/await

Асинхронное программирование на Python приобрело значительную популярность благодаря способности повышать производительность и скорость реагирования приложений. Введение ключевых слов asyncи awaitв Python 3.5 упростило написание асинхронного кода и управление им. В этой статье мы рассмотрим различные методы и приемы реализации асинхронного программирования с использованием asyncи await, а также примеры кода.

  1. Асинхронные функции:

Самый распространенный способ написания асинхронного кода на Python — определение асинхронных функций с помощью ключевого слова async. Эти функции можно ожидать с помощью ключевого слова await, что позволяет программе приостановить выполнение до тех пор, пока не будет доступен ожидаемый результат. Вот пример:

import asyncio
async def fetch_data(url):
    # Simulate an asynchronous operation
    await asyncio.sleep(2)
    return "Data fetched from: " + url
async def main():
    result = await fetch_data("https://example.com")
    print(result)
asyncio.run(main())
  1. Одновременное выполнение нескольких задач:

Python предоставляет функцию asyncio.gather()для одновременного выполнения нескольких асинхронных задач. Эта функция принимает список сопрограмм и возвращает будущее, которое завершается, когда все сопрограммы выполнены. Вот пример:

import asyncio
async def task1():
    await asyncio.sleep(1)
    print("Task 1 completed")
async def task2():
    await asyncio.sleep(2)
    print("Task 2 completed")
async def main():
    await asyncio.gather(task1(), task2())
asyncio.run(main())
  1. Обработка исключений:

При работе с асинхронным кодом важно правильно обрабатывать исключения. Вы можете использовать блоки tryи exceptдля перехвата и обработки исключений, возникающих в асинхронной функции. Вот пример:

import asyncio
async def fetch_data(url):
    try:
        # Simulate an asynchronous operation
        await asyncio.sleep(2)
        # Raise an exception
        raise ValueError("Invalid data")
    except ValueError as e:
        print("Error:", str(e))
asyncio.run(fetch_data("https://example.com"))
  1. Ожидание выполнения нескольких задач:

Чтобы дождаться завершения нескольких задач и получить их результаты, вы можете использовать asyncio.wait()или asyncio.as_completed(). Эти функции возвращают сопрограммы, которые можно ожидать. Вот пример использования asyncio.wait():

import asyncio
async def task1():
    await asyncio.sleep(1)
    return "Task 1"
async def task2():
    await asyncio.sleep(2)
    return "Task 2"
async def main():
    tasks = [task1(), task2()]
    done, pending = await asyncio.wait(tasks)
    for task in done:
        print(task.result())
asyncio.run(main())

Асинхронное программирование с использованием asyncи awaitна Python дает множество преимуществ, таких как повышение производительности, лучшее использование ресурсов и упрощение структуры кода. Освоив методы, обсуждаемые в этой статье, вы сможете эффективно использовать возможности асинхронного программирования для создания эффективных и масштабируемых приложений.