У меня есть приложение Fastapi, работающее, например, 10.11.12.13:8000 , и я «зарегистрирует» несколько «работников» с этим адресом. Клиенты могут отправлять запросы ( каждый запрос уникальный ) работнику по зарегистрированному адресу, но я зарегистрировал всех работников с одним и тем же адресом, поэтому все запросы отправляются на 10.11.12.13:8000.
, но вот часть, с которой я пытаюсь справиться: . Клиент может отправить тот же уникальный запрос на несколько работников в то же время. Как мое приложение может обрабатывать запрос только один раз и вернуть ответ клиенту, как если бы каждый работник выполняет задачу независимо?
Код: Выделить всё
from fastapi import FastAPI
import uvicorn
app = FastAPI()
work_count = 0
@app.get("/")
def handle_workload():
global work_count
work_count += 1
return {"message": f"Hello world! {work_count}"}
def start_server():
uvicorn.run(
app,
host="0.0.0.0",
port=8000,
log_level="debug"
)
if __name__ == "__main__":
start_server()
Код: Выделить всё
import asyncio
import aiohttp
import random
async def send_request(worker_url: str):
async with aiohttp.ClientSession() as session:
async with session.get(worker_url) as response:
if response.status == 200:
return await response.json()
#I registered all the worker with the same address:
worker_servers = [
("worker_1", "http://localhost:8000"),
("worker_2", "http://localhost:8000"),
("worker_3", "http://localhost:8000"),
("worker_4", "http://localhost:8000")
]
async def main():
worker_urls = [worker[1] for worker in random.sample(worker_servers, 3)]
responses = await asyncio.gather(*[send_request(url) for url in worker_urls])
print(responses)
if __name__ == "__main__":
asyncio.run(main())
Подробнее здесь: https://stackoverflow.com/questions/795 ... th-fastapi