0

我正在使用 flask-restx 来制作一个 API,它依赖于一个 sklearn-classifier,它需要一些时间来加载,但随后会非常快速地从输入中计算值。天真地,人们可能会做类似下面的代码的事情。

from flask import Flask
from flask_restx import Api, Resource
import time

app = Flask(__name__)
api = Api(app = app)

name_space = api.namespace('main', description='Main APIs')

class Foo():
    def __init__(self):
        # Simulate object that takes a while to create
        time.sleep(10)
    def compute(self, x):
        return 2*x


@name_space.route("/<int:x>")
class MainClass(Resource):
    def get(self, x):
        foo = Foo()
        status = foo.compute(x)
        return {
            "status": status
        }


if __name__ == '__main__':
    app.run()

然而,这给每个 API 调用增加了非常大的开销,因为在每个调用中都会实例化 'Foo' 对象。在调用之间保持“Foo”对象以避免这种开销的最佳做法是什么(如果存在)?

请注意,所讨论的对象对于每个用户或会话来说并不是不同的,就像在这个问题中一样。相反,对于 API 的每次调用,Foo 对象都是相同的。

4

0 回答 0