Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Створення та запуск корутин | Асинхронне програмування
Структурне програмування на Python

Створення та запуск корутин

Свайпніть щоб показати меню

Щоб почати працювати з асинхронним програмуванням у Python, необхідно зрозуміти корутини. Корутина — це спеціальна функція, яка визначається за допомогою async def. Корутини дозволяють призупиняти та відновлювати виконання, що дає змогу обробляти такі завдання, як очікування операцій введення/виведення — наприклад, читання файлів, мережеві запити або запити до бази даних — без блокування всієї програми. Це означає, що поки одне завдання очікує на дані, інші завдання можуть продовжувати виконання, підвищуючи ефективність і чутливість програми.

Для запуску корутини використовується asyncio.run, який запускає цикл подій, виконує вашу корутину та закриває цикл після завершення. Це стандартний спосіб запуску асинхронного коду в сучасному Python.

Якщо потрібно запустити декілька корутин одночасно, можна скористатися asyncio.gather для їх паралельного виконання. Це дозволяє програмі запускати кілька завдань і чекати завершення всіх, що особливо корисно при повільних операціях, таких як введення/виведення.

Наступний код демонструє ці концепції.

import asyncio

async def greet(name, delay):
    await asyncio.sleep(delay)
    print(f"Hello, {name}!")

async def main():
    # Schedule two coroutines to run concurrently
    await asyncio.gather(
        greet("Alice", 2),
        greet("Bob", 1)
    )

asyncio.run(main())

Очікуваний результат:

Hello, Bob!
Hello, Alice!

Вітання Боба з'являється першим, оскільки для нього встановлено меншу затримку (1 секунда), ніж для Аліси (2 секунди).

Корутину greet створено за допомогою async def, що дозволяє призупиняти виконання через await asyncio.sleep(delay) перед виведенням привітання. Корутину main використовує два виклики greet — для "Alice" із затримкою 2 секунди та для "Bob" із затримкою 1 секунда — за допомогою asyncio.gather. Це означає, що обидва привітання обробляються одночасно, і програма не чекає завершення одного перед запуском іншого. Нарешті, asyncio.run(main()) запускає цикл подій, виконує корутину main і забезпечує очищення після завершення. Такий підхід дозволяє обробляти кілька завдань, що містять очікування (наприклад, мережеві запити або затримки часу), одночасно, підвищуючи ефективність і чутливість програми.

question mark

Яке твердження найкраще описує, як asyncio.gather планує виконання корутин?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 4. Розділ 2
some-alt