"not threadsafe" 是什么意思?在 Flask 应用程序中使用 SimpleCache(python 字典缓存)
what does "not threadsafe" mean? Using SimpleCache (python dictionary Cache) in Flask app
我正在考虑使用 SimpleCache 在 DASH 应用程序中存储 Python 数据帧。显然它只是使用 Python 字典。是否可以从 SimpleCache 中获取部分写入的数据帧?这是我最关心的问题。
由于线程化,我 运行 还会遇到哪些其他问题?
what does “not threadsafe” mean?
当您使用像 gunicorn
这样的 WSGI 服务器部署应用程序时,您可能会有多个工作人员。因为 SimpleCache
是内存中的缓存,每个工作人员都有自己分配的内存,所以一个工作人员设置的缓存键对另一个工作人员不可用。如果不加以考虑,这可能会导致奇怪的行为,因为对您的应用程序的单独请求由不同的工作人员处理。这在 运行 开发服务器时不会很明显,因为只有一个进程。
解决方法是使用像 Redis 这样的缓存后端(见下文)。这意味着所有工作人员都在查看相同的缓存。
Is it possible to get a partially-written dataframe out of the SimpleCache?
您或许应该测试自己对此的实现,但这是一个非常基本的示例:
>>> import pandas as pd
>>> d = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> df
col1 col2
0 1 3
1 2 4
请注意,从 werkzeug 1.0 开始,SimpleCache 已移至 cachelib。所以在执行 pip install cachelib
之后你可以将 df
添加到缓存并提取它。
>>> from cachelib import SimpleCache
>>> cache = SimpleCache()
>>> cache.add('somekey', df)
True
>>> cache.get('somekey')
col1 col2
0 1 3
1 2 4
要使其与您的 redis 服务器一起使用,只需将前两行更改为:
from cachelib import RedisCache
cache = RedisCache(host='your-redis-server')
这意味着在生产中进行最小的代码更改允许您在开发时仍然使用 SimpleCache
。 (add
和 get
都是 类 的方法)。
我正在考虑使用 SimpleCache 在 DASH 应用程序中存储 Python 数据帧。显然它只是使用 Python 字典。是否可以从 SimpleCache 中获取部分写入的数据帧?这是我最关心的问题。
由于线程化,我 运行 还会遇到哪些其他问题?
what does “not threadsafe” mean?
当您使用像 gunicorn
这样的 WSGI 服务器部署应用程序时,您可能会有多个工作人员。因为 SimpleCache
是内存中的缓存,每个工作人员都有自己分配的内存,所以一个工作人员设置的缓存键对另一个工作人员不可用。如果不加以考虑,这可能会导致奇怪的行为,因为对您的应用程序的单独请求由不同的工作人员处理。这在 运行 开发服务器时不会很明显,因为只有一个进程。
解决方法是使用像 Redis 这样的缓存后端(见下文)。这意味着所有工作人员都在查看相同的缓存。
Is it possible to get a partially-written dataframe out of the SimpleCache?
您或许应该测试自己对此的实现,但这是一个非常基本的示例:
>>> import pandas as pd
>>> d = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> df
col1 col2
0 1 3
1 2 4
请注意,从 werkzeug 1.0 开始,SimpleCache 已移至 cachelib。所以在执行 pip install cachelib
之后你可以将 df
添加到缓存并提取它。
>>> from cachelib import SimpleCache
>>> cache = SimpleCache()
>>> cache.add('somekey', df)
True
>>> cache.get('somekey')
col1 col2
0 1 3
1 2 4
要使其与您的 redis 服务器一起使用,只需将前两行更改为:
from cachelib import RedisCache
cache = RedisCache(host='your-redis-server')
这意味着在生产中进行最小的代码更改允许您在开发时仍然使用 SimpleCache
。 (add
和 get
都是 类 的方法)。