异步上下文管理器 (async with)
异步上下文管理器允许你在异步环境中管理资源,比如数据库连接或文件操作。
基本实现
class AsyncDatabaseConnection:
async def __aenter__(self):
print("建立数据库连接")
await asyncio.sleep(0.5) # 模拟连接建立
return self
async def __aexit__(self, exc_type, exc, tb):
print("关闭数据库连接")
await asyncio.sleep(0.3) # 模拟连接关闭
async def execute(self, query):
print(f"执行查询: {query}")
await asyncio.sleep(0.2)
return f"{query}的结果"
async def main():
async with AsyncDatabaseConnection() as db:
result = await db.execute("SELECT * FROM users")
print(result)
asyncio.run(main())
实际应用:异步文件操作
import aiofiles
async def async_file_ops():
async with aiofiles.open('data.txt', mode='w') as f:
await f.write('Hello, async world!')
async with aiofiles.open('data.txt', mode='r') as f:
content = await f.read()
print(content)
异步生成器 (async for)
异步生成器允许你异步地生成和消费数据流。
创建异步生成器
async def async_data_stream(n):
for i in range(n):
await asyncio.sleep(0.5) # 模拟异步数据获取
yield i
async def consume_stream():
async for item in async_data_stream(5):
print(f"处理数据项: {item}")
await asyncio.sleep(0.2) # 模拟数据处理