我正在考虑使用SimpleCache将Python数据帧存储在DASH应用程序中。显然,它只是使用了Python字典。是否可以从SimpleCache中获取部分写入的数据帧?这是我最大的担忧。
由于线程处理,我还可能遇到哪些其他问题?
"非线程安全"是什么意思?
当您使用像gunicorn
这样的WSGI服务器部署应用程序时,您可能会有多个工作线程。因为SimpleCache
是内存中的缓存,并且每个工作进程都有自己分配的内存,所以一个工作进程设置的缓存密钥对另一个工作程序不可用。如果不考虑,这可能会导致奇怪的行为,因为对应用程序的单独请求由不同的工作人员处理。当使用dev服务器运行时,这不会很明显,因为只有一个进程。
解决方法是使用像Redis这样的缓存后端(见下文(。这意味着所有工作人员都在查看同一个缓存。
是否可以从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
是这两个类的方法(。