Python 3.x 如何在金字塔框架内的请求之间缓存/记忆数据帧(昂贵的计算)?

Python 3.x 如何在金字塔框架内的请求之间缓存/记忆数据帧(昂贵的计算)?,python-3.x,pandas,pyramid,Python 3.x,Pandas,Pyramid,我有一个计算一些命中率的类。计算和数据检索过程相当昂贵。因此,对于给定的一组参数,我希望持久化“calculate_hits”的结果。我希望这样做,以便在片刻或数小时后再次需要这些结果时,计算和检索不需要再次发生 天真地,我尝试将输出结果放入金字塔框架内的会话对象中。这不起作用,因为熊猫数据帧太大…(可能还有其他问题) 那我该怎么做呢 [对于其他上下文:我正在计算pandas数据框中的一些值。然后我在jquery数据表中显示整个表。我使用前端查找所选行。我正在发回所选行的列表。现在我想转到数据框

我有一个计算一些命中率的类。计算和数据检索过程相当昂贵。因此,对于给定的一组参数,我希望持久化“calculate_hits”的结果。我希望这样做,以便在片刻或数小时后再次需要这些结果时,计算和检索不需要再次发生

天真地,我尝试将输出结果放入金字塔框架内的会话对象中。这不起作用,因为熊猫数据帧太大…(可能还有其他问题)

那我该怎么做呢


[对于其他上下文:我正在计算pandas数据框中的一些值。然后我在jquery数据表中显示整个表。我使用前端查找所选行。我正在发回所选行的列表。现在我想转到数据框中的这些行,并从该数据框中获取信息以保存到数据库中。)

您需要定义某种可以跨请求共享的同步数据存储然后,您可能会询问带有锁的内存存储。您可以将此类存储附加到
注册表
,并从每个请求访问它。您有责任注意此处的线程问题,并适当地锁定存储,以使2个或多个请求不会同时更新存储

class FindHits(object):

    def __init__(self, a, b):
       self.a = a
       self.b = b

    def calculate_hits():
       # Some expensive calculation using arguments self.a, and self.b
       df = pd.DataFrame()
       return df
顺便说一句,我不知道pandas中的数据帧是否是线程安全的,但我敢打赌它们不是线程安全的,所以您需要以某种方式通过序列化到更原始的形式,然后对每个请求反序列化到新的数据帧来解决这个问题

def main(...):
    config.registry.mystore = {'frame': pd.DataFrame()}

def view(request):
    frame = request.registry.mystore['frame']