Створення та запуск корутин
Свайпніть щоб показати меню
Щоб почати працювати з асинхронним програмуванням у 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 і забезпечує очищення після завершення. Такий підхід дозволяє обробляти кілька завдань, що містять очікування (наприклад, мережеві запити або затримки часу), одночасно, підвищуючи ефективність і чутливість програми.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат