gpt4 book ai didi

python - Django 应用程序在内存中有一个在所有请求之间共享的 Pandas 对象?

转载 作者:太空狗 更新时间:2023-10-30 01:13:57 32 4
gpt4 key购买 nike

我开发了一个 Shiny 的应用程序。当它启动时,它加载一次,一些数据表。大约 4 GB 的数据表。然后,连接到该应用程序的人可以使用该界面并使用这些数据表。

此应用程序不错,但有一些限制。这就是为什么我正在寻找另一种解决方案。

我的想法是让 Pandas 和 Django 一起工作。这样,我可以同时开发接口(interface)和 RESTful API。但我需要的是所有到达 Django 的请求都可以使用已加载一次的 pandas 数据表。想象一下,如果任何请求都必须加载 4 GB 的内存......那将是可怕的。

我找遍了所有地方,但找不到任何方法来做到这一点。我发现了这个问题:https://stackoverflow.com/questions/28661255/pandas-sharing-same-dataframe-across-the-request但它没有任何反应。

为什么我需要将数据放在 RAM 中?因为我需要性能来快速呈现要求的结果。例如,我不能要求 MariaDB 计算和维护这些数据,因为它涉及一些仅 R 或 Python 或其他语言中的专用包可以完成的计算。

最佳答案

我有一个类似的用例,我只想加载(实例化)某个对象一次并在所有请求中使用它,因为加载需要一些时间(秒)而且我无法承受会引入的延迟对于每个请求。

我使用了 Django>=1.7 中的一个特性,AppConfig.ready()方法,只加载一次。

代码如下:

# apps.py
from django.apps import AppConfig
from sexmachine.detector import Detector

class APIConfig(AppConfig):
name = 'api'

def ready(self):
# Singleton utility
# We load them here to avoid multiple instantiation across other
# modules, that would take too much time.
print("Loading gender detector..."),
global gender_detector
gender_detector = Detector()
print("ok!")

然后当你想使用它的时候:

from api.apps import gender_detector
gender_detector.get_gender('John')

ready() 方法中加载您的数据表,然后在任何地方使用它。我估计每个 WSGI worker 都会加载一次表,所以在这里要小心。

关于python - Django 应用程序在内存中有一个在所有请求之间共享的 Pandas 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662287/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com