栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从asyncio.Protocol.data_received调用协程

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从asyncio.Protocol.data_received调用协程

您需要将协程添加到事件循环中,然后

Future.add_done_callback
在协程完成时使用来处理结果:

@asyncio.coroutinedef go(self):    return(yield from asyncio.sleep(3, result = b'data reply'))def data_received(self, data):    print('Data Received', flush=True)    task = asyncio.async(self.go()) # or asyncio.get_event_loop().create_task()    task.add_done_callback(self.handle_go_result)def handle_go_result(self, task):    data = task.result()    self.send(data)

data_received
根本不允许直接调用协程,因为调用者不会尝试调用协程
yieldfrom
,并且在内部创建/运行新的事件循环
data_received
将始终阻塞主事件循环,直到内部事件循环结束为止工作。

您只想通过主事件循环(

asyncio.async
/
loop.create_task()
)安排一些工作,并安排在工作完成后运行的回调(
add_done_callback
)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639438.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号