我正在使用 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 对象都是相同的。