【发布时间】:2020-04-17 06:44:17
【问题描述】:
我尝试在服务器和客户端都使用 aiohttp 3.6.2: 对于 webhook 执行工作:
1) 从服务中获取 JSON 请求 2) 快速发送 HTTP 200 OK 返回服务 3) 之后做了额外的工作:使 http-request 降低 web-service(answer 2-5 sec)
我不明白在视图(或处理程序)返回 web.Response(text="OK") 后如何执行工作?
当前视图: (这很慢导致响应前 http_request 执行缓慢) 视图.py:
async def make_http_request(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
print(await resp.text())
async def work_on_request(request):
url = (await request.json())['url']
await make_http_request(url)
return aiohttp.web.Response(text='all ok')
routes.py:
from views import work_on_request
def setup_routes(app):
app.router.add_get('/', work_on_request)
server.py:
from aiohttp import web
from routes import setup_routes
import asyncio
app = web.Application()
setup_routes(app)
web.run_app(app)
所以,对我来说,解决方法是用不同的 event_loop 再启动一个线程,或者您可能知道如何向当前事件循环添加一些工作?
【问题讨论】: