Асинхронная обработка в Python

Асинхронная обработка в Python

В этой статье объясняется асинхронная обработка в Python.

Вы можете ознакомиться с примерами кода для базового использования async/await и модуля asyncio в Python.

YouTube Video

Асинхронная обработка в Python

Асинхронная обработка в Python — это механизм для эффективной работы с трудоёмкими операциями ввода-вывода, такими как чтение и запись файлов или сетевое взаимодействие. При синхронной обработке следующая операция ожидает завершения текущей, но при асинхронной обработке вы можете выполнять другие задачи во время ожидания. В Python для выполнения асинхронной обработки предоставляется модуль asyncio. Здесь мы поэтапно объясним его основные элементы и способы их использования.

Базовый синтаксис

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

 1import asyncio
 2
 3async def say_hello():
 4    print("Hello")
 5    await asyncio.sleep(1)
 6    print("World")
 7
 8if __name__ == "__main__":
 9    # Execute asynchronous task
10    asyncio.run(say_hello())
  • В приведенном выше коде функция say_hello определяется как асинхронная задача. В то время как происходит ожидание 1 секунды с помощью sleep(), могут выполняться другие асинхронные задачи.

Выполнение нескольких задач

Используя функцию gather из модуля asyncio, вы можете запускать несколько задач одновременно.

 1import asyncio
 2
 3async def task1():
 4    print("Task 1 started")
 5    await asyncio.sleep(2)
 6    print("Task 1 completed")
 7
 8async def task2():
 9    print("Task 2 started")
10    await asyncio.sleep(1)
11    print("Task 2 completed")
12
13async def main():
14    await asyncio.gather(task1(), task2())
15
16if __name__ == "__main__":
17    asyncio.run(main())
  • В этом примере task1 и task2 выполняются параллельно. В результате task2 завершается первой из двух задач, но общее время выполнения равно времени выполнения самой длинной задачи.

Обработка ошибок

Обработка ошибок важна даже в асинхронной обработке. Вы можете перехватывать и обрабатывать ошибки, используя стандартный синтаксис try-except.

 1import asyncio
 2
 3async def faulty_task():
 4    raise Exception("An error occurred")
 5
 6async def main():
 7    try:
 8        await faulty_task()
 9    except Exception as e:
10        print(f"Caught an error: {e}")
11
12if __name__ == "__main__":
13    asyncio.run(main())
  • Этот код демонстрирует, как исключения, возникающие внутри асинхронных функций, могут быть перехвачены с помощью try-except и их сообщения об ошибке безопасно обработаны. Исключение из faulty_task перехватывается внутри main и корректно выводится.

Резюме

Асинхронная обработка в Python использует async / await и asyncio для одновременного выполнения других задач во время ожидания ввода-вывода, что обеспечивает эффективную обработку. Используя одновременное выполнение нескольких задач и асинхронный ввод-вывод, вы можете значительно повысить производительность. Кроме того, так как вы можете обрабатывать ошибки так же, как и с обычным try-except, вы можете безопасно запускать асинхронный код.

Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.

YouTube Video