Gunicorn возвращает один и тот же pid для разных рабочих процессов - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь лучше понять, как 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 или без него.

Кто-нибудь может пролить свет на это? Спасибо!

1 Ответ

0 голосов
/ 30 мая 2020

Что заставляет вас думать, что сервер должен выдавать несколько PID? Я не вижу здесь ничего, что могло бы развить другой процесс. os.getpid() будет возвращать одно и то же значение каждый раз, если вызывается сервером. Надеюсь, это поможет!

...