我是 Python3 asyncio 的新手。
我有一个函数可以不断地从 websocket 连接检索消息。
我想知道我是否应该使用while True
循环或asyncio.ensure_future
以递归方式。
哪个是首选还是不重要?
Example:
async def foo(websocket):
while True:
msg = await websocket.recv()
print(msg)
await asyncio.sleep(0.0001)
or
async def foo(websocket):
msg = await websocket.recv()
print(msg)
await asyncio.sleep(0.0001)
asyncio.ensure_future(foo(websocket))
我推荐迭代变体,原因有两个:
更容易理解和扩展。与基于回调的 future 相比,协程的好处之一是它们允许使用熟悉的控制结构,例如if
and while
对代码的执行进行建模。如果您想将代码更改为例如在现有循环周围添加一个外循环,或者在循环后添加一些代码(例如另一个循环),这在非递归版本中会容易得多。
它更有效率。呼唤asyncio.ensure_future(foo(websocket))
为每个新迭代实例化一个新的协程对象和一个全新的任务。虽然两者都不是特别重量级,但在其他条件相同的情况下,最好避免不必要的分配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)