异步编程

导入模块:
导入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')}")
View Code

 

posted @ 2024-05-21 06:20  优雅的代码  阅读(9)  评论(0编辑  收藏  举报