Как справиться с одновременными дублирующими запросами один раз с FastAPI?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как справиться с одновременными дублирующими запросами один раз с FastAPI?

Сообщение Anonymous »

Я сталкиваюсь с этой ситуацией:
У меня есть приложение 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()
client.py[/b]

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»