моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Сопрограмма — это программный компонент, который позволяет нескольким точкам входа в программу приостанавливать и возобновлять выполнение в определенных местах. В отличие от потоков и процессов, переключение сопрограмм явно контролируется программистом, а не запланировано операционной системой. Это делает сопрограмму более легкой при выполнении переключения контекста, поскольку нет необходимости сохранять и восстанавливать всю среду выполнения (например, стек потоков).
В Python сопрограммы в основном проходятasync
иawait
Ключевые слова для достижения. Функции, определенные с использованием этих ключевых слов, называются «функциями сопрограммы», и они не выполняются сразу при вызове, а вместо этого возвращают объект сопрограммы. Этот объект сопрограммы необходимо запланировать для выполнения в цикле событий.
Асинхронное программирование — это модель параллелизма, которая позволяет программе продолжать выполнять другие задачи, ожидая завершения определенных длительных операций (например, операций ввода-вывода). В Python асинхронное программирование часто используется с сопрограммами, выполнение которых запланировано через цикл событий.
async
иawait
async def
определить функцию сопрограммы.await
дождаться завершения другой сопрограммы или асинхронной операции.asyncio
Библиотека обеспечивает реализацию цикла событий. Вам необходимо убедиться, что ваш асинхронный код выполняется в каком-то цикле событий.asyncio.run(main())
для запуска вашей основной функции сопрограммы, которая автоматически создает цикл событий и управляет им.python复制代码
import asyncio | |
# 定义一个异步函数,模拟一个耗时的I/O操作 | |
async def fetch_data(url): | |
print(f"Fetching {url}...") | |
# 模拟耗时操作 | |
await asyncio.sleep(1) | |
return f"Data from {url}" | |
async def main(): | |
# 同时启动多个异步任务 | |
task1 = asyncio.create_task(fetch_data('http://example.com/data1')) | |
task2 = asyncio.create_task(fetch_data('http://example.com/data2')) | |
# 等待所有任务完成 | |
result1, result2 = await asyncio.gather(task1, task2) | |
print(result1) | |
print(result2) | |
# 运行主协程 | |
asyncio.run(main()) |
В этом примереfetch_data
Это асинхронная функция, имитирующая сетевые запросы.main
В функции мы запустили два одновременноfetch_data
асинхронная задача и использованиеawait asyncio.gather()
Подождите, пока они закончатся одновременно.
asyncio
Он является частью стандартной библиотеки Python и используется для поддержки сопрограмм и асинхронного программирования.Он также предоставляет богатый API, такой какasyncio.Queue
、asyncio.Lock
и т. д. для решения проблем параллелизма и синхронизации в асинхронном коде.