Дублирование запросов
Запускаю uvicorn с fastAPI.
PYTHONPATH=. main:app --workers=2 --port=8080 --host=0.0.0.0
Следующий пример:
import time
from multiprocessing import Lock
import fastapi
app = fastapi.FastAPI()
lock = Lock()
import os
p = os.getpid()
print('start', p)
@app.get('/health', status_code=204)
async def health():
lock.acquire()
print(p)
time.sleep(5)
lock.release()
return
Захожу в браузер. Открываю 3 вкладки и последовательно, делаю 3 запроса так, чтобы уложиться в таймаут 5 секунд. В консоли вижу:
PYTHONPATH=. main:app --workers=2 --port=8080 --host=0.0.0.0
INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
INFO: Started parent process [8799]
start 8802
INFO: Started server process [8802]
INFO: Waiting for application startup.
INFO: Application startup complete.
start 8801
INFO: Started server process [8801]
INFO: Waiting for application startup.
INFO: Application startup complete.
8801
INFO: 127.0.0.1:57484 - "GET /health HTTP/1.1" 204 No Content
8802
8801
INFO: 127.0.0.1:57488 - "GET /health HTTP/1.1" 204 No Content
INFO: 127.0.0.1:57494 - "GET /health HTTP/1.1" 204 No Content
8802
INFO: 127.0.0.1:57502 - "GET /health HTTP/1.1" 204 No Content
8801
INFO: 127.0.0.1:57510 - "GET /health HTTP/1.1" 204 No Content
Видно, что прошло, 5 запросов. Почему так происходит? Почему 5 вместо 3х. Если я сделаю 2 запроса, то увижу 3 вывода вместо 2х.
Ответы (1 шт):
Автор решения: hedgehogues
→ Ссылка
Данная проблема не воспроизводится, если воспользоваться curl и сделать 3 одновременных запроса:
curl http://localhost:8080/health