Python中async await的使用例子
import asyncio
async def slow_operation(n):
await asyncio.sleep(n)
print(‘Slow operation {} complete’.format(n))
return n
loop = asyncio.get_event_loop()
done, _ = loop.run_until_complete(
asyncio.wait([
slow_operation(1),
slow_operation(2),
slow_operation(9),
slow_operation(2),
slow_operation(1),
slow_operation(2),
slow_operation(3),
]))
for fut in done:
print(“return value is {}”.format(fut.result()))
Slow operation 1 complete
Slow operation 1 complete
Slow operation 2 complete
Slow operation 2 complete
Slow operation 2 complete
Slow operation 3 complete
Slow operation 9 complete
return value is 2
return value is 1
return value is 2
return value is 1
return value is 9
return value is 3
return value is 2
Python中async await的使用例子
import asyncio
import aiohttp
from datetime import datetime
# 异步获取网页内容
async def fetch_url(session, url):
try:
async with session.get(url, timeout=10) as response:
html = await response.text()
return f"{url}: {len(html)} bytes"
except Exception as e:
return f"{url}: Error - {str(e)}"
# 主异步函数
async def main():
urls = [
'https://httpbin.org/get',
'https://api.github.com',
'https://docs.python.org'
]
# 创建aiohttp会话
async with aiohttp.ClientSession() as session:
# 创建任务列表
tasks = [fetch_url(session, url) for url in urls]
# 并发执行所有任务
print(f"开始时间: {datetime.now().strftime('%H:%M:%S')}")
results = await asyncio.gather(*tasks)
# 输出结果
for result in results:
print(result)
print(f"结束时间: {datetime.now().strftime('%H:%M:%S')}")
# 运行异步程序
if __name__ == "__main__":
asyncio.run(main())
这个例子展示了async/await的核心用法:
-
定义异步函数:用
async def声明异步函数,里面可以用await调用其他异步操作 -
await关键字:在
await response.text()这里,程序会挂起当前协程,让出控制权给事件循环,直到这个IO操作完成 -
并发执行:
asyncio.gather()同时启动多个协程任务,实现真正的并发IO操作 -
事件循环:
asyncio.run()创建和管理事件循环
关键点:async/await不是多线程,而是单线程下的协程并发,特别适合IO密集型任务。函数被await调用时会暂停但不阻塞线程,事件循环可以调度其他协程运行。
建议:用asyncio处理网络请求、文件读写等IO等待场景。

