1

我正在考虑使用 SimpleCache 将 Python 数据帧存储在 DASH 应用程序中。显然它只是使用 Python 字典。是否可以从 SimpleCache 中获取部分写入的数据帧?这是我最大的担忧。

由于线程,我还会遇到哪些其他问题?

4

1 回答 1

2

“非线程安全”是什么意思?

当您使用 WSGI 服务器部署应用程序时gunicorn,您可能会有多个工作人员。因为SimpleCache是内存中的缓存,并且每个工作人员都有自己分配的内存,所以一个工作人员设置的缓存键对另一个工作人员不可用。如果不考虑这可能会导致奇怪的行为,因为对您的应用程序的单独请求由不同的工作人员处理。这在使用开发服务器运行时不会很明显,因为只有一个进程。

解决方法是使用像 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是两个类的方法)。

于 2020-04-27T01:10:36.510 回答