Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python flask_cache and memoize-生成_cache_键错误:类型为';非类型';没有len()_Python_Flask_Memoization_Flask Cache - Fatal编程技术网

Python flask_cache and memoize-生成_cache_键错误:类型为';非类型';没有len()

Python flask_cache and memoize-生成_cache_键错误:类型为';非类型';没有len(),python,flask,memoization,flask-cache,Python,Flask,Memoization,Flask Cache,我对使用flask有点陌生,我想缓存一个函数的结果,该函数读取了pickle数据。我使用flask\u cache中的memoize功能,如下所示: 在model_chacher.py中: from flask_cache import Cache import pickle model_cache = Cache(config={'CACHE_TYPE': 'simple'}) class ModelCacher(): @model_cache.memoize(50)

我对使用flask有点陌生,我想缓存一个函数的结果,该函数读取了pickle数据。我使用
flask\u cache
中的
memoize
功能,如下所示:

model_chacher.py
中:

from flask_cache import Cache
import pickle


model_cache = Cache(config={'CACHE_TYPE': 'simple'})


class ModelCacher():
    @model_cache.memoize(50)
    def get_model(self, customer_ID):

        with open('/path/to/data.pickle', 'rb') as tf:
            model_args = pickle.load(tf)
            trained_classifier = model_args[0]

        return trained_classifier
from flask import Flask
from controllers.topic import controller as topic_controller
from models.modelcache.model_chacher import model_cache


app = Flask(__name__)
model_cache.init_app(app)
app.register_blueprint(topic_controller.topic_controller_blueprint)


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=80, debug=True)
flask\u compose.py
中:

from flask_cache import Cache
import pickle


model_cache = Cache(config={'CACHE_TYPE': 'simple'})


class ModelCacher():
    @model_cache.memoize(50)
    def get_model(self, customer_ID):

        with open('/path/to/data.pickle', 'rb') as tf:
            model_args = pickle.load(tf)
            trained_classifier = model_args[0]

        return trained_classifier
from flask import Flask
from controllers.topic import controller as topic_controller
from models.modelcache.model_chacher import model_cache


app = Flask(__name__)
model_cache.init_app(app)
app.register_blueprint(topic_controller.topic_controller_blueprint)


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=80, debug=True)
我在
topic\u controller
中调用
ModelCacher.get\u model(customer\u ID)

from models.modelcache.model_chacher import ModelCacher
...
trained_classifier = ModelCacher.get_model(cls_str)
...
运行
flask\u compose.py
并发送请求后,我得到以下结果:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/app/controllers/topic/controller.py", line 20, in classify
    return ModelCacher.get_model(cls_str)
  File "/usr/local/lib/python3.6/site-packages/flask_cache/__init__.py", line 528, in decorated_function
    cache_key = decorated_function.make_cache_key(f, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/flask_cache/__init__.py", line 393, in make_cache_key
    **kwargs)
  File "/usr/local/lib/python3.6/site-packages/flask_cache/__init__.py", line 434, in _memoize_kwargs_to_args
    elif abs(i-args_len) <= len(argspec.defaults):
TypeError: object of type 'NoneType' has no len()
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.6/site packages/flask/app.py”,第1997行,调用__
返回self.wsgi_应用程序(环境,启动响应)
wsgi_应用程序中的文件“/usr/local/lib/python3.6/site packages/flask/app.py”,第1985行
response=self.handle\u异常(e)
文件“/usr/local/lib/python3.6/site packages/flask/app.py”,第1540行,在句柄中
重放(exc_类型、exc_值、tb)
文件“/usr/local/lib/python3.6/site packages/flask/_compat.py”,第33行,重新登录
增值
wsgi_应用程序中的文件“/usr/local/lib/python3.6/site packages/flask/app.py”,第1982行
response=self.full\u dispatch\u request()
文件“/usr/local/lib/python3.6/site packages/flask/app.py”,第1614行,完整发送请求
rv=自身处理用户异常(e)
文件“/usr/local/lib/python3.6/site packages/flask/app.py”,第1517行,在handle\u user\u异常中
重放(exc_类型、exc_值、tb)
文件“/usr/local/lib/python3.6/site packages/flask/_compat.py”,第33行,重新登录
增值
文件“/usr/local/lib/python3.6/site packages/flask/app.py”,第1612行,完整发送请求
rv=自我分派请求()
文件“/usr/local/lib/python3.6/site packages/flask/app.py”,第1598行,在调度请求中
返回self.view_函数[rule.endpoint](**req.view_参数)
文件“/app/controllers/topic/controller.py”,第20行,分类
返回ModelCacher.get\u model(cls\u str)
文件“/usr/local/lib/python3.6/site packages/flask_cache/_init__.py”,第528行,在函数中
cache_key=修饰的_函数。生成_cache_key(f,*args,**kwargs)
文件“/usr/local/lib/python3.6/site packages/flask_cache/__init__.py”,第393行,在make_cache_key中
**kwargs)
文件“/usr/local/lib/python3.6/site packages/flask\u cache/\uuuuuu init\uuuuuuuuuuu.py”,第434行,在\u memorize\u kwargs\u to\u args中

elif abs(i-args_len)您定义的
get_model
方法是实例方法而不是类方法。调用该方法时使用
ModelCacher.get\u model(cls\u str)
。尝试使用
ModelCacher()调用它。获取模型(cls\u str)
。或者,您可以将其定义为一个全局函数。

谢谢@stamaimer的好意!我只是创建了我的
ModelCacher
的一个实例,解决了这个问题,我还使用了
flask\u cache.cache中的
cached
,而不是
memoize