web-dev-qa-db-fra.com

Comment appeler la fonction asynchrone sans attendre?

J'ai une action de contrôleur dans l'application 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 est une fonction asynchrone. Maintenant, lorsque j'appelle action, je veux que mon action revienne le plus tôt possible et perform_message mettre en boucle d'événement.

De cette façon, perform_message n'est pas exécuté

10
Pasalino

Une façon serait d'utiliser create_task fonction:

import asyncio

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

Une autre façon serait d'utiliser ensure_future fonction:

import asyncio

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