如何从aiohttp服务器处理程序异步返回?

时间:2019-05-20 18:50:19

标签: python python-3.x async-await python-asyncio aiohttp

我正在运行http服务器来处理到达events端点的Slack API调用。松弛的文档建议应用程序(此服务器)需要在3秒内确认请求的接收(这可以通过空主体和status = 200来实现)。我对请求的处理需要3秒钟以上的时间,因此我想在收到带有空白响应的请求后立即返回,然后处理数据。这是我正在使用的代码:

from aiohttp import web

routes = web.RouteTableDef()
app = web.Application()


async def process(data):
    # Do Some Processing which takes more than 5 seconds


@routes.post('/events')
async def handle_event(request):
    post_data = await request.json()
    await process(post_data)

    return web.Response(body="", status=200) 
    # I want to do this immediately then process() data afterwards

app.add_routes(routes)
web.run_app(app, port=3000)

如何立即返回并处理数据(包括一些数据库查询以及使用API​​发送松弛消息)

我尝试创建asyncio任务,但是直到此任务完成执行(这是可以理解的)之后,返回才会发生:

    process_task = asyncio.create_task(process)
    await task

0 个答案:

没有答案