Асинхронная обработка в 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-канал.