import asyncio
import time
print("\n\n=== 2. 异步模式开始 (请注意观察心跳) ===")
# 这是一个背景任务,模拟 UI 动画或者心跳检测
async def background_heartbeat():
while True:
print(" 💓 (背景任务) 咚-咚-咚... 程序还活着!")
await asyncio.sleep(0.3) # 每0.3秒跳动一次
# 异步生成器
async def async_stream():
for i in range(3):
print(f"🔄 (生成器内部) 正在用力下载第 {i+1} 个包...")
# 【挂起】告诉 Python:我要等1秒,这期间你去处理那个“心跳”任务吧
await asyncio.sleep(1)
yield f"📦 包 {i+1} 下载完成"
async def main():
# 1. 启动背景心跳任务
task = asyncio.create_task(background_heartbeat())
start_time = time.time()
# 2. 开始 Async For 循环
# 关键点:每次在这里“等”数据的时候,上面的 background_heartbeat 就会插队运行
async for data in async_stream():
print(f"✅ 主程序收到: {data}\n")
# 停止心跳任务
task.cancel()
print(f"=== 异步模式结束,总耗时: {time.time() - start_time:.2f}秒 ===")
# 运行
asyncio.run(main())