如果我有一个使用异步生成器项的协同程序,那么从外部条件终止该循环的“最佳”方法是什么
考虑这个,
while not self.shutdown_event.is_set():
async with self.external_lib_client as client:
async for message in client:
if self.shutdown_event.is_set():
break
await self.handle(message)
如果我设置shutdown_event
,它将跳出while循环,但直到下一个message
被async for
循环处理完毕。什么是构造async for
迭代器的正确方法,以便在迭代器之间满足条件时可以短路,从而产生结果
是否有添加Timeout
的标准方法
一种方法是将迭代移动到
async def
并使用取消:另一种方法是将
shutdown_event
转换为一次性异步流,并使用aiostream来监视这两个流。这样for
循环在发出关闭事件信号时获得一个对象,并且可以中断循环而不必费心等待下一条消息:注意:由于问题中的代码不可运行,以上示例未经测试
相关问题 更多 >
编程相关推荐