Python: асинхронный запуск с использованием asyncio

Асинхронное выполнение функций в отдельных потоках довольно часто дает возможность сделать вашу программу более эффективной.

Пример, как сделать асинхронное выполнение при помощи библиотеки asyncio

import asyncio

# указываем асинхронные функции
async def do():
    task1 = asyncio.create_task(task('Анализ', 5))
    task2 = asyncio.create_task(task('Подготовка', 7))
    task3 = asyncio.create_task(task('Запуск', 3))
    
    await task1
    await task2
    await task3

# исполняем задачу
async def task(action, time_sleep):
    print(f'Новая задача: {action}')
    await asyncio.sleep(time_sleep)  # эмуллируем задержку при исполнении функции
    print(f'{action} - готово!')

Для запуска, используйте:

asyncio.run(do())

Если вы попытаетесь запустить asyncio.run(do()) из под Jupyter Notebook, то получите ошибку «RuntimeError: asyncio.run() cannot be called from a running event loop», т.к. Jupyter и так запущен в событийном цикле. Поэтому вместо этого вам нужно вызывать так: await do().

В итоге исполнения кода вы получите что-то вроде этого:

Новая задача: Анализ
Новая задача: Подготовка
Новая задача: Запуск
Запуск - готово!
Анализ - готово!
Подготовка - готово!

 

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями: