如何从python中的异步方法返回值?

15 python asynchronous flask

我有以下烧瓶应用程序:

async def run():
   conn = await asyncpg.connect(db_url)
   values = await conn.fetch('''SELECT ... FROM ... WHERE ...;''')
   await conn.close()

@app.route('/')
def test():
    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(run())
    return json.dumps([dict(r) for r in res]) 

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我得到了TypeError: 'NoneType' object is not iterable.如何将我values转换为JSON?

Pit*_*Pit 14

您需要在run函数中返回值,以便它们可用于test:

async def run():
   conn = await asyncpg.connect(db_url)
   values = await conn.fetch('''SELECT ... FROM ... WHERE ...;''')
   await conn.close()
   return values
Run Code Online (Sandbox Code Playgroud)

  • 再想一想:你可能想要做的是`loop.create_task(conn.close())`并且仍然使用`返回值`。这将安排连接的关闭,而无需在您的函数中等待它。 (2认同)