协程的嵌套; async io 模块的使用

发布于:2023-01-09 ⋅ 阅读:(500) ⋅ 点赞:(0)

async io 异步IO asyncio 是python3.4 之后的协程模块,是python 实现并发重要的包,这个包使用事件循环驱动 实现并发。事件循环是一种处理多并发量的有效方式,在维基百科中它被描述为「一种等待程序分配事件或消息的 编程架构」,我们可以定义事件循环来简化使用轮询方法来监控事件,通俗的说法就是「当A 发生时,执行B」。 事件循环利用poller 对象,使得程序员不用控制任务的添加、删除和事件的控制。事件循环使用回调方法来知道事 件的发生。

import asyncio
async def func1():
    for i in range(5):  #定义一个协程
        print("协程A!!!")
        await asyncio.sleep(0)  #人为的去模拟IO阻塞   让协程去实现自动切换


async def func2():
    for i in range(5):  #定义一个协程
        print("协程B!!!")
        await asyncio.sleep(0)


#获取循环事件
loop=asyncio.get_event_loop()

#启动多个协程并行执行
loop.run_until_complete(asyncio.gather(func1(),func2()))
loop.close()

协程的嵌套:使用async可以定义协程,协程用于耗时的io操作,我们也可以封装更多的io操作过程,这样就实现了嵌套 的协程,即一个协程中await了另外一个协程,如此连接起来。

#在一个协程里边使用async 嵌套另外一个协程实现并行的快速的计算结果

import asyncio


async def print_sum(x, y):
    result = await compute(x, y)  # 等待下一个协程计算
    print("%s+%s=%s" % (x, y, result))


async def compute(x, y):
    print("开始计算x:%s和y:%s" % (x, y))
    await asyncio.sleep(0)  #等待计算结果出来之后再输出结果(上面的协程)
    return y + x


loop=asyncio.get_event_loop()
loop.run_until_complete(print_sum(10,20))
loop.close()

网站公告

今日签到

点亮在社区的每一天
去签到