如何将变量从 FastAPI 传递给其他类

时间:2021-02-19 16:29:48

标签: python function class boolean fastapi

有人可以帮我处理我的案子吗?我有一个必须传递给 Class 的变量才能从这个 Class 设置 bool 。但是,就我而言,我可以这样做来设置 bool,但不能传递变量。在另一种情况下,我可以传递我的变量,但不能从这个类设置我的 bool。我使用 FastAPI 作为我的 API。

(1) 这是我的代码,可以传递一些变量但不能设置 bool:

@app.get("/predict")
def predict(
    brand: str = Query(...),
):
    e = MyModelPrediction()
    e(brand)

    result_data = {'brand': brand}
    result = {
        'data': result_data
    }
    return result

(2) 这是我的代码,不能传递一些变量但可以设置bool:

@app.get("/predict")
def predict(
    brand: str = Query(...),
    prediction=Depends(MyModelPrediction())
):
    result_data = {'brand': brand}
    result = {
        'data': result_data
    }
    return result

所以,这是我的课程:

class MyModelPrediction(object):
    model_loaded: bool = False
    print(model_loaded)

    def __call__(self, brand):
        print("Brand :", brand)
        if not self.model_loaded:
            self._load_model()
        time.sleep(1)

    def _load_model(self):
        print("Load model...")
        time.sleep(5)
        self.model_loaded = True

我想将 model_loaded 设置为 True,但还要从函数 brand 传递变量 predict。如果我使用方法(1),bool仍然是False并且变量可以通过,但是如果我使用方法(2),bool可以是True但变量没有通过。

1 个答案:

答案 0 :(得分:0)

我无法测试,但我希望您在案例 2 中一遍又一遍地使用相同的默认对象。这是 Python 中相当常见的问题。

@app.get("/predict")
def predict(
    brand: str = Query(...),
    prediction=Depends(MyModelPrediction())
):

任何参数的默认值只在加载时计算一次,所以这与:

tmp1 = Query(...)
tmp2 = Depends(MyModelPrediction())

@app.get("/predict")
def predict(
    brand: str = tmp1,
    prediction = tmp2
):

这些在功能上是相同的,但在第二个版本中更明显的是,除非调用者明确提供了值,否则此函数的每次调用都将使用相同的默认对象。