行业资讯
Python3.7 高级编程之 async/await asyncio 通过任务task并发运行协程
同步执行的协程import asyncio import time # 使用 main 函数的await 发起两个携程此时代码仍然是同步的当第一个await 完成之后 才会启动第二个await 这是他们的运行就和函数是一致的 async def say_after(delay, what): await asyncio.sleep(delay) print(what) async def main(): print(fstarted at {time.strftime(%X)}) await say_after(1, hello) await say_after(2, world) print(ffinished at {time.strftime(%X)}) asyncio.run(main())并发执行的协程import asyncio import time # 与上一个例子不同的是这里启动协程 是通过启动 task 任务的方式这个任务被认为是可等待的对象因此它们可以并发的运行本例将比上例节省一秒钟 async def say_after(delay, what): await asyncio.sleep(delay) # 为什么要使用这种方式来模拟等待因为 time.sleep(delay) 不被asyncio认为是可等待对象所以当替换为 time.sleep() 将不会出现预期的 # time.sleep(delay) print(what) async def main(): print(fstarted at {time.strftime(%X)}) # 用于创建协程任务 task1 asyncio.create_task(say_after(1,hello)) task2 asyncio.create_task(say_after(2,world)) # 并发启动任务 虽然并发的执行了但在Python中 程序会等待最耗时的协程运行完毕后退出所以这里耗时2秒 await task1 await task2 print(ffinished at {time.strftime(%X)}) asyncio.run(main())asyncio.sleep(delay) 是用来模拟阻塞行为的可以把它看做是一个耗时任务它会返回一个可等待对象time.sleep(delay)虽然可以模拟一个耗时操作但是它并不能在await语法中使用既它不是一个可等待对象
郑州网站建设
网页设计
企业官网