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

2024-03-28 12:04:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个http服务器来处理到达events端点的松弛API调用。slack文档建议应用程序(此服务器)需要在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发送slack消息)

我尝试创建一个asyncio任务,但在该任务完成执行之前,返回不会发生(这是可以理解的):

    process_task = asyncio.create_task(process)
    await task


Tags: 数据服务器apiwebapptaskdataasync