web-dev-qa-db-ja.com

待機せずに非同期関数を呼び出す方法は?

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は実行されません

10
Pasalino

1つの方法は create_task 関数:

import asyncio

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

他の方法はensure_future 関数:

import asyncio

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