Asyncio中的无限循环或&Quot;递归&Quot; [英] Infinite loop or "recursive" in Asyncio
本文介绍了Asyncio中的无限循环或&Quot;递归&Quot;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是Python3 Asyncio的新手。
我有一个函数可以不断从WebSocket连接检索邮件。
我不知道应该以递归方式使用while True
循环还是asyncio.ensure_future
。
首选还是无关紧要?
示例:
async def foo(websocket):
while True:
msg = await websocket.recv()
print(msg)
await asyncio.sleep(0.0001)
或
async def foo(websocket):
msg = await websocket.recv()
print(msg)
await asyncio.sleep(0.0001)
asyncio.ensure_future(foo(websocket))
推荐答案
我推荐迭代变体,原因有两个:
更易于理解和扩展。与基于回调的期货相比,协程的好处之一是它们允许使用熟悉的控制结构(如
if
和while
)来建模代码的执行。如果您想要更改代码,例如在现有循环周围添加一个外部循环,或者在循环之后添加一些代码(例如另一个循环),那么在非递归版本中这会容易得多。效率更高。调用
asyncio.ensure_future(foo(websocket))
会为每个新迭代实例化一个新的协程对象和一个全新的任务。在其他条件相同的情况下,虽然两者都不是特别重的,但最好避免不必要的分配。
这篇关于Asyncio中的无限循环或&Quot;递归&Quot;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文