python async await 用洗衣服的场景来说明白

import time
import asyncio


def demo1():
"""普通版本 阻塞 需要9秒钟执行完毕"""
def wash1():
time.sleep(3)
print("wash1 finished")

def wash2():
time.sleep(3)
print("wash2 finished")

def wash3():
time.sleep(3)
print("wash3 finished")

wash1()
wash2()
wash3()


def demo2():
"""添加async关键字 创建协程 但是这个版本会报错:RuntimeWarning: Enable tracemalloc to get the object allocation traceback"""
    async def wash1():
time.sleep(3)
print("wash1 finished")

async def wash2():
time.sleep(3)
print("wash2 finished")

async def wash3():
time.sleep(3)
print("wash3 finished")

wash1()
wash2()
wash3()


def demo3():
"""用async 和 await创建正确的协程 这个只需要3秒钟左右!"""
async def wash1():
await asyncio.sleep(3) # 返回来一个可等待的对象, await后面必须跟一个awaitable类型或者具有 __await__属性的对象!
print("wash1 finished")

async def wash2():
await asyncio.sleep(3)
print("wash2 finished")

async def wash3():
await asyncio.sleep(3)
print("wash3 finished")

# 调用需要事件循环机制
# step1 创建一个事件循环
loop = asyncio.get_event_loop()

# step2 将异步函数(协程)加入事件队列
tasks = [
wash1(),
wash2(),
wash3()
]

# step3 执行事件队列 直到最晚的一个事件被处理完毕后结束
loop.run_until_complete(asyncio.wait(tasks))

# step4 如果不再使用loop 建议养成良好的关闭的习惯
loop.close()


猜你喜欢

转载自www.cnblogs.com/yuzhaoblog/p/13207979.html