Python 3.x 无限循环;递归的;异步

Python 3.x 无限循环;递归的;异步,python-3.x,python-asyncio,Python 3.x,Python Asyncio,我是Python3 asyncio的新手 我有一个不断从websocket连接检索消息的函数 我想知道是应该使用while True循环还是异步IO。以递归的方式确保未来的 哪一个是首选还是无关紧要 示例: async def foo(websocket): while True: msg = await websocket.recv() print(msg) await asyncio.sleep(0.0001) 或 async def

我是Python3 asyncio的新手

我有一个不断从websocket连接检索消息的函数

我想知道是应该使用
while True
循环还是
异步IO。以递归的方式确保未来的

哪一个是首选还是无关紧要

示例:

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.sure\u future(foo(websocket))
    为每个新迭代实例化一个新的协同程序对象和一个全新的任务。虽然两者都不是特别重,但在其他条件相同的情况下,最好避免不必要的分配