使用 Gunicorn 服务器的 FastApi 中的并发请求结果混淆

Results Are Getting Mixed Up For Concurrent Requests in FastApi Using Gunicorn Server

根据线程标题,给出以下 API:

app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    allow_origins=['*'],
    allow_credentials=True,
    allow_methods=['*'],
    allow_headers=['*'],
)

app.mount("/app/static", StaticFiles(directory="app/static"), name="static")


@app.post("/")
async def get_text(image: UploadFile = File(...)):
    
    temp_file = _save_file_to_disk(image, path="app/static/", save_as="temp")
    text = await ocr(temp_file)
   
    return {"text": text}

和以下 Gunicorn 命令启动应用程序:

CMD ["gunicorn", "app:app", "-w", "4", "--threads", "12", "--timeout", "120", 
"--bind", "0.0.0.0:8080", "-k","uvicorn.workers.UvicornWorker", "--worker-connections", "1000"]

如果 3 个不同的用户同时发送了 3 个单独的请求,第一个用户的结果将超过第二个用户的结果,并且第三个用户

虽然您在问题中缺少相关上下文,但我将尝试猜测:

temp_file = _save_file_to_disk(image, path="app/static/", save_as="temp")

这似乎是将上传的文件保存为 temp 下的 app/static。然后你 运行 ocr 在这个文件上。

text = await ocr(temp_file)

但是 - 所有三个进程的文件名都相同,这意味着最后一个请求将用请求三的内容覆盖该文件。每个进程都会开始他们的ocr-ing,但是文件已经在进程下被更改了。

而是为每个文件使用唯一的名称 - 您可能还应该将其保留在直接通过 static.

提供的任何内容之外