Я пытаюсь лучше понять, как Gunicorn управляет своими процессами, поэтому я написал следующий код:
from fastapi import FastAPI
import os
from time import sleep
app = FastAPI()
sleep_time = [5, 0]
global_var = 100
order_called = 0
@app.get('/test')
def test_handler():
global global_var, order_called
order_called += 1
local_order_called = order_called
sleep(sleep_time[order_called - 1]) # doing some time consuming stuff here
global_var += 1
return {"test": os.getpid(), "global_var": global_var, "order called": local_order_called}
И я начал с Gunicorn:
gunicorn -w 2 -k uvicorn.workers.UvicornWorker server:app --preload
The сервер должен выводить: pid, 102, 1 и pid, 101, 2 для двух последовательных запросов - потому что рабочему № 1 требуется больше времени для завершения sh.
Я получаю правильный результат , но почему-то два возвращенных pid совпадают, что очень странно - это происходит с параметром --preload или без него.
Кто-нибудь может пролить свет на это? Спасибо!