← Назад ко всем вопросам

Какие основные функции есть в asyncio и когда их использовать (run, sleep, wait, gather, create_task)?

1️⃣ Как кратко ответить

asyncio предоставляет инструменты для написания асинхронного кода в Python. Основные функции включают:

  • run(): Запускает асинхронную программу.
  • sleep(): Приостанавливает выполнение на заданное время.
  • wait(): Ожидает завершения множества задач.
  • gather(): Запускает и собирает результаты нескольких задач.
  • create_task(): Создает задачу для выполнения корутины.

Эти функции помогают эффективно управлять асинхронными операциями, улучшая производительность программ, особенно при работе с I/O.

2️⃣ Подробное объяснение темы

Введение в asyncio

asyncio — это библиотека в Python, которая позволяет писать асинхронный код. Асинхронное программирование полезно, когда вы работаете с операциями ввода-вывода (I/O), такими как сетевые запросы или работа с файлами, где программа может ожидать завершения операции. Вместо того чтобы простаивать, программа может выполнять другие задачи.

Основные функции asyncio

Давайте рассмотрим основные функции, которые предоставляет asyncio, и поймем, как и когда их использовать.

1. asyncio.run()

Что делает:
asyncio.run() — это функция, которая запускает асинхронную программу. Она принимает корутину и выполняет её до завершения.

Когда использовать:
Используйте asyncio.run() для запуска вашей основной асинхронной функции. Это самый простой способ начать выполнение асинхронного кода.

Пример:

import asyncio
​
async def main():
    print("Hello, World!")
​
asyncio.run(main())

2. asyncio.sleep()

Что делает:
asyncio.sleep() приостанавливает выполнение текущей корутины на заданное количество секунд.

Когда использовать:
Используйте asyncio.sleep() для симуляции задержек или для ожидания в асинхронных функциях.

Пример:

import asyncio
​
async def main():
    print("Start sleeping")
    await asyncio.sleep(2)
    print("Wake up!")
​
asyncio.run(main())

3. asyncio.wait()

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

Когда использовать:
Используйте asyncio.wait() для управления множеством задач, когда вам нужно дождаться их завершения.

Пример:

import asyncio
​
async def task(name, delay):
    await asyncio.sleep(delay)
    return f"Task {name} completed"
​
async def main():
    tasks = [
        asyncio.create_task(task("A", 2)),
        asyncio.create_task(task("B", 1))
    ]
    done, pending = await asyncio.wait(tasks)
    for task in done:
        print(task.result())
​
asyncio.run(main())

4. asyncio.gather()

Что делает:
asyncio.gather() запускает несколько корутин и собирает их результаты. Это удобный способ параллельного выполнения задач.

Когда использовать:
Используйте asyncio.gather() для одновременного выполнения нескольких асинхронных операций и получения их результатов.

Пример:

import asyncio
​
async def task(name, delay):
    await asyncio.sleep(delay)
    return f"Task {name} completed"
​
async def main():
    results = await asyncio.gather(
        task("A", 2),
        task("B", 1)
    )
    for result in results:
        print(result)
​
asyncio.run(main())

5. asyncio.create_task()

Что делает:
asyncio.create_task() создает задачу для выполнения корутины. Это позволяет запускать корутину в фоновом режиме.

Когда использовать:
Используйте asyncio.create_task() для запуска корутин, которые должны выполняться параллельно с другими задачами.

Пример:

import asyncio
​
async def task(name, delay):
    await asyncio.sleep(delay)
    print(f"Task {name} completed")
​
async def main():
    task1 = asyncio.create_task(task("A", 2))
    task2 = asyncio.create_task(task("B", 1))
    await task1
    await task2
​
asyncio.run(main())

Тема: Асинхронность
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки