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

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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值