gpt4 book ai didi

fastApi 中的 python 全局变量无法正常工作

转载 作者:行者123 更新时间:2023-12-02 17:54:08 31 4
gpt4 key购买 nike

我有一个简单的 fastApi 演示应用程序,它实现了一个功能:
通过调用名为 changeResponse 的 post api 获取不同的响应 json。
changeResponse api 只是更改了一个全局变量,另一个 api 通过同一个全局变量返回了不同的响应。在本地环境中,它工作正常,但是当我在 docker 上构建它时,我只调用 changeResponse 一次后响应总是改变。代码如下如下:

from typing import Optional
from fastapi import FastAPI
from util import read_json
import enum

app = FastAPI()

type = "00"

@app.post("/changeResponse")
async def handle_change_download_response(param:Optional[str]):
global type
type = param
print("type is "+type)
return {"success":"true"}

@app.post("/download")
async def handle_download(param:Optional[str]):
print("get download param: "+param)
if legalDownload(param):
print("type is "+type)
return read_json.readDownloadSuccessRes(type)
else:
return read_json.readDownloadFailRes()

def legalDownload(data:str)->bool:
return True
dockerfile 如下:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7

COPY ./app /app
我除了:
调用 changeResponse 参数是 7,得到 7 的响应,
调用 changeResponse 参数是 8,得到 8 的响应。
我得到了什么:
调用changeResponse参数是7,得到7的响应,调用changeReponse 8,有时响应是7,有时是8,无法预测

最佳答案

tiangolo/uvicorn-gunicorn-fastapi基于 uvicorn-gunicorn-docker图像,默认情况下会创建多个工作人员。摘自 gunicorn_conf.py :default_web_concurrency = workers_per_core * cores因此,出现上述情况是因为请求是由 处理的。不同的 worker (过程)。每个都有自己的全局变量副本
更新:如果要更改工作人员的数量,请使用以下环境变量:

  • WORKERS_PER_CORE : 它将把worker 的数量设置为CPU 内核数乘以这个值。
  • MAX_WORKERS :您可以使用它让图像自动计算工作人员的数量,但要确保将其限制为最大值。
  • WEB_CONCURRENCY 覆盖 worker 数量的自动定义。

  • 您可以将其设置为:
    docker run -d -p 80:80 -e WEB_CONCURRENCY="2" myimage
    这些变量和示例的更详细描述 here

    如果要在worker之间共享数据,注意这个 topic .

    关于fastApi 中的 python 全局变量无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63949240/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com