如何在没有等待的情况下调用异步功能?

时间:2017-06-19 12:32:55

标签: python python-asyncio aiohttp

我在aiohttp应用程序中有一个控制器动作。

async def handler_message(request):

    try:
        content = await request.json()
        perform_message(x,y,z)
    except (RuntimeError):
        print("error in perform fb message")
    finally:
        return web.Response(text="Done")

perform_message是异步函数。现在,当我调用动作时,我希望我的动作尽快返回并且perform_message放入事件循环。

这样就不会执行perform_message

2 个答案:

答案 0 :(得分:10)

一种方法是使用create_task功能:

import asyncio

async def handler_message(request):
    ...
    loop = asyncio.get_event_loop()
    loop.create_task(perform_message(x,y,z))
    ...

答案 1 :(得分:0)

其他方式是使用ensure_future函数:

import asyncio

async def handler_message(request):
...
loop = asyncio.get_event_loop()
loop.ensure_future(perform_message(x,y,z))
...