我试图更好地了解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 -w 2 -k uvicorn.workers.UvicornWorker server:app --preload
服务器应该为两个连续的请求输出:pid,102,1和pid,101,2,因为工作人员#1需要更多时间才能完成。
我得到正确的输出,但是不知何故返回的两个pid是相同的,这很奇怪-无论是否使用--preload,这种情况都会发生。
任何人都可以对此有所了解吗?谢谢!
我试图更好地了解gunicorn如何管理其流程,因此我编写了以下代码:from fastapi import FastAPI import os from time import sleep app = FastAPI()sleep_time = ...
是什么使您认为服务器应产生多个PID?我在这里看不到任何可以进行其他处理的东西。每次由服务器调用时,os.getpid()
将返回相同的值。希望能有所帮助!