异步编程
导入模块:
导入asyncio库,这是Python的异步编程库。
导入time模块,用于获取当前时间。
定义异步函数:
say_after是一个异步函数,它接受两个参数:delay(等待的时间)和what(要打印的消息)。
函数内部使用await asyncio.sleep(delay)来等待指定的延迟时间。
函数返回一个格式化的字符串,包含消息和延迟时间。
定义主函数:
main是一个异步函数,它定义了程序的主要逻辑。
在main函数中,创建了两个异步任务task1和task2,它们分别调用say_after函数并等待1秒和2秒。
使用time.strftime('%Y-%m-%d %H:%M:%S')获取当前时间并打印开始时间。
使用asyncio.gather(task1, task2)来并发执行task1和task2,并等待它们完成。
打印返回值列表ret,由于say_after函数没有返回值,ret将是一个空列表。
打印结束时间。
运行主函数:
最后,使用asyncio.run(main())来运行main函数。这个函数内部会创建一个事件循环,并启动它以运行main函数。
当运行这段代码时,它会输出开始时间、两个任务的返回值列表(由于say_after函数没有返回值,这个列表将是空的)和结束时间。
1 import asyncio 2 import time 3 4 # 定义异步函数 say_after 5 async def say_after(delay, what): 6 # 等待指定的延迟时间 7 await asyncio.sleep(delay) 8 # 返回一个格式化的字符串,包含消息和延迟时间 9 return f"{what}-{delay}" 10 11 # 定义主函数 main 12 async def main(): 13 # 创建异步任务 task1 和 task2 14 task1 = asyncio.create_task(say_after(1, 'hello')) 15 task2 = asyncio.create_task(say_after(2, 'world')) 16 17 # 打印开始时间 18 print(f"started at {time.strftime('%Y-%m-%d %H:%M:%S')}") 19 20 # 使用 asyncio.gather 并发执行 task1 和 task2 21 # gather 函数会等待所有任务完成并返回它们的返回值 22 ret = await asyncio.gather(task1, task2) 23 24 # 打印返回值列表 25 print(ret) 26 27 # 打印结束时间 28 print(f"finished at {time.strftime('%Y-%m-%d %H:%M:%S')}")