python3 asyncio 等待对象_asyncio可等待对象基本示例

__await__返回迭代器,因为协程的底层机制最初基于yield from语法。实际上,__await__返回iter(some_future)或{}。它可用于创建每次等待时产生不同值的对象。请看这个简单的例子:import asyncio

import random

class RandomProducer:

def __await__(self):

return self.producer().__await__()

async def producer(self):

sleep = random.random()

value = random.randint(0, 9)

return await asyncio.sleep(sleep, result=value)

async def main():

producer = RandomProducer()

while True:

print(await producer)

loop = asyncio.get_event_loop()

loop.run_until_complete(main())

回答您的意见:Does every coroutine eventually ends up calling asyncio.sleep?

不,而且asyncio.sleep实际上不是链的末端。在最底层,它总是一个正在被让渡的未来:协程链请求事件循环“当这个未来有结果时请叫醒我”。在asyncio.sleep的情况下,它使用loop.call_later设置给定时间后的未来结果。循环为调度回调提供了更多的方法:loop.call_at,loop.add_reader,loop.add_writer,loop.add_signal_handler,等等An asyncio library such as aiohttp. I'm assuming there is some code somewhere that doesn't rely on existence of previous coroutines.

为了实现单线程并发,所有的IO操作都必须委托给事件循环。

例如,aiohttp依赖于loop.create_connection协程到manage the TCP connection。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值