Jak*_*ake 5 python async-await fastapi
我必须提供一个 API,该 API 向其他 API 发送多个请求并将它们的响应合并为输出。
做到这一点的最佳方法是什么?这是某种异步等待场景吗?感谢您的建议。
from fastapi import FastAPI
import requests
app = FastAPI()
@app.post('/api')
def main_api():
JScontent = json.loads(request.json())
input = JScontent['content']
response1 = requests.post(url1, json={"input":input})
response2 = requests.post(url2, json={"input":input})
response3 = requests.post(url3, json={"input":input})
response4 = requests.post(url4, json={"input":input})
prediction = fuse_responses(response1, response2, response3, response4)
return prediction
Run Code Online (Sandbox Code Playgroud)
我目前正在使用 Flask 进行开发,但认为它可能没有能力,或者管理这样的场景会很麻烦,因此,愿意更改为 FastAPI。
[更新]
是否有一些挖掘发现了这个链接。我想它可以像FastAPI一样应用吗?我之前没有异步和等待方面的经验,因此感谢验证。
from fastapi import FastAPI
app = FastAPI()
async def send_requests(url, input_):
res = await app.post(url, input_)
return res
@app.post('/api')
async def main_api():
JScontent = json.loads(request.json())
input_ = JScontent['content']
res1 = await send_requests(url1, input_)
res2 = await send_requests(url2, input_)
res3 = await send_requests(url3, input_)
res4 = await send_requests(url4, input_)
prediction = fuse_responses(res1, res2, res3, res4)
return prediction
Run Code Online (Sandbox Code Playgroud)
是的,使用asynchronous功能是处理此类问题的正确方法。
不过,您想要实现的目标称为AGGREGATOR PATTERN,其中一个服务接收请求并调用所有不同的服务。这种情况在微服务的情况下很常见,其中一个页面包含来自多个微服务的信息。它有时在网关(又名API AGGREGATION PATTERN)中实现,但大多数时候我在专用服务中看到这种模式。
下面是一些可能有用的链接:
https://learn.microsoft.com/en-us/azure/architecture/patterns/gateway-aggregation
在这里,它使用异步代码来实现您想要实现的目标
https://dzone.com/articles/microservices-aggregator-design-pattern-using-aws
注意
您始终可以从 Flask 应用程序生成新线程来执行请求。或者,您始终可以创建一个异步函数,该函数将URL异步调用所有 s,等待它们的响应,聚合它们并返回结果。
这是一个简短的教程,介绍如何实现从同步代码运行异步代码的目标。
https://realpython.com/async-io-python/
| 归档时间: |
|
| 查看次数: |
16922 次 |
| 最近记录: |