标签: flask-caching

Flask-Caching 将 UWSGI 缓存与 NGINX 一起使用

UWSGI 通过 UNIX 套接字连接到 Flask 应用程序:

NGINX(监听端口 80)<-> UWSGI(每个 UNIX-SOCKER 的列表)<-> FLASK-APP

我已经初始化了一个 uwsgi 缓存来处理全局数据。我想使用 python 包 Flask-caching 来处理缓存。

我正在尝试使用正确的缓存地址初始化缓存实例。似乎有什么不对劲。我认为 app.run() 的参数与 uwsgi 无关。

如果我设置缓存条目,它总是返回 None:

app.route("/")
def test():
    cache.set("test", "OK", timeout=0)
    a = cache.get("test")
    return a
Run Code Online (Sandbox Code Playgroud)

主要.py

from flask import Flask
from flask_caching import Cache

app = Flask(__name__)
# Check Configuring Flask-Caching section for more details
cache = Cache(app, config={'CACHE_TYPE': 'uwsgi', 'CACHE_UWSGI_NAME':'mycache@localhost'})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
Run Code Online (Sandbox Code Playgroud)

uwsgi.ini

[uwsgi]
module = main
callable = app
cache2 = name=mycache,items=100 …
Run Code Online (Sandbox Code Playgroud)

python nginx uwsgi flask-cache flask-caching

7
推荐指数
1
解决办法
2505
查看次数

删除Flask-Cache或Flask-Caching中的特定缓存

我在python中使用我的API中的Flask缓存.

目前我正在使用装饰器@app.cache.memoize(cache_memoize_value),我通过调用来冲洗它app.cache.delete_memoized(view)

问题是,memoize它将被缓存n视图而不是特定的时间.如果我想为缓存指定超时,我需要使用装饰器@app.cache.cached(timeout=300)并清除它app.cache.clear().但是,这种清晰的方法将清除一切,而不仅仅是一个特定的观点.

如何在使用缓存装饰器时清除特定视图?

python caching flask flask-cache flask-caching

5
推荐指数
2
解决办法
3145
查看次数

Flask 缓存设置方法抛出 KeyError?

为了缓存一些数据,我调用了 cache.set 方法。但是它正在抛出 KeyError。错误日志:

 File "D:\Sample_Project\SomeRouter.py", line 176, in run
    FetchFeed._prepareCache(f_content, cache, _program, _sprint)
  File "D:\Sample_Project\SomeRouter.py", line 197, in _prepareCache
    cache.set(cKey, data[last_index:last_index + MAX_DATA_PER_PAGE])
  File "c:\python\lib\site-packages\flask_caching\__init__.py", line 254, in set
    return self.cache.set(*args, **kwargs)
  File "c:\python\lib\site-packages\flask_caching\__init__.py", line 246, in cache
    return app.extensions["cache"][self]
KeyError: <flask_caching.Cache object at 0x04F9C8D0>
Run Code Online (Sandbox Code Playgroud)

服务器模块如下所示:

cache_type = 'simple' if 'FLASK_ENV' in os.environ and os.environ['FLASK_ENV'] == 'development' else 'uwsgi'
cache = Cache(config={'CACHE_TYPE': cache_type})
app = Flask("MY_PROJECT")
cache.init_app(app)

# some api.route functions
# goes here ....

if __name__ == "__main__": …
Run Code Online (Sandbox Code Playgroud)

python flask flask-caching

5
推荐指数
1
解决办法
1215
查看次数

如何使用 Flask 缓存变量?

我正在使用 Flask 构建一个 Web 表单,希望用户能够输入多个条目,并在将数据发送到数据库之前让他们有机会使用撤消按钮后悔输入。我正在尝试使用Flask-Caching但未能正确设置它。

我已经按照Flask Mega-Tutorial来设置 Flask(这是我的第一个 Flask 应用程序)。

+---app
|   |   forms.py
|   |   routes.py
|   |   __init__.py
|   +---static
|   +---templates
Run Code Online (Sandbox Code Playgroud)

我想知道我需要如何配置 Flask 应用程序才能基本上能够执行以下操作:

cache.add("variable_name", variable_data)
variable_name = cache.get("variable_name")
cache.clear()
Run Code Online (Sandbox Code Playgroud)

在其中一页(带有 @app.route 装饰器的函数)?

在应用程序中。init.py我有:

from flask import Flask
from config import Config
from flask_caching import Cache

app = Flask(__name__)
app.config.from_object(Config)
cache = Cache(app, config={'CACHE_TYPE': 'simple'})

from app import routes
Run Code Online (Sandbox Code Playgroud)

在routes.py中我有:

from flask import current_app
Run Code Online (Sandbox Code Playgroud)

当我尝试调用缓存时,我使用下面的代码。

current_app.cache.add("variable_name", variable_data)
Run Code Online (Sandbox Code Playgroud)

当我尝试使用该表单时,出现以下错误:

AttributeError: 'Flask' object …
Run Code Online (Sandbox Code Playgroud)

python caching flask flask-caching

5
推荐指数
1
解决办法
2万
查看次数

Flask-Caching如何/在哪里存储数据?

我只是想知道使用Flask-Caching时响应的存储方式和位置。

例如:

from flask import Flask, request
from flask_caching import Cache
import datetime

app = Flask(__name__)
cache = Cache(app, config={'CACHE_TYPE': 'simple'})

def make_cache_key(*args, **kwargs):
    return request.url

@app.route('/', methods=['GET'])
@cache.cached(timeout=50, key_prefix=make_cache_key)
def foo():
    time = str(datetime.datetime.now()) + " " + str(request.url)
    return time, 200

if __name__ == '__main__':   
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

flask flask-caching

3
推荐指数
1
解决办法
2150
查看次数

使用flask_restful和flask_caching进行循环导入

我在项目中使用flask_restful已经有一段时间了,因为我喜欢将资源分成不同的文件以进行基本组织。现在我想添加flask_caching,但遇到了(简单?)循环导入问题

我的项目结构是这样的

flask_api.py
-resources
--my_resource.py
--my_other_resource.py
--so_many_more_resources.py
Run Code Online (Sandbox Code Playgroud)

my_resources.py 的端点添加到flask_api.py 中,我还在其中创建了flask_cache 缓存对象,如下所示:

# flask_api.py
from flask import Flask
from flask_restful import Api
from flask_caching import Cache
from resources import my_resource
app = Flask(__name__)
cache = Cache(app, config={'sample config'})
api = Api(app)
api.add_resource(my_resource.GetStuff, '/api/v2/stuff/get')
# this file also runs the app
Run Code Online (Sandbox Code Playgroud)

然后我(尝试)将缓存导入到 my_resource.py - 我在其中使用 @cache 装饰器

# resources/my_resource.py
from flask_api import cache
class GetStuff(Resource):
    @cache.memoize(timeout=30)
    def get():
        return "Stuff"
Run Code Online (Sandbox Code Playgroud)

但这会导致可怕的循环导入问题。我可以将所有资源导入夹在该cache = Cache(...)线上方api.add_resource()。然而,这感觉像是一种黑客代码的味道,并且是一个非常非常多肉的三明治。我宁愿将它们全部放在文件的顶部。

解决这个问题的正确方法是什么?(希望不要彻底修改大部分代码库)

tl;dr:flask_api 创建缓存并导入资源 -> 资源无法从flask_api …

python flask flask-restful flask-caching

2
推荐指数
1
解决办法
1536
查看次数