【问题标题】:Can you store a constant global object in Django?你能在 Django 中存储一个常量全局对象吗?
【发布时间】:2020-06-10 04:56:25
【问题描述】:

我正在开发一个使用地理空间数据的小型网页。我使用 GeoPandas 和 Shapely 在 Python 中进行了初步分析,并试图以此构建网页。问题是,在使用 Django 时,我似乎找不到将形状文件存储为常量对象的方法。每次请求对 shapefile 进行操作时,我都需要从源加载数据。这需要大约 6 秒,而标准数据帧深拷贝 df.copy() 需要几分之一秒。有没有一种方法可以在 Django 中存储一个数据框,可以由视图访问和深度复制,而无需重新读取 shapefile?

【问题讨论】:

  • 你是如何运行 Django 的?在典型使用中,它应该保持运行并且应该能够将对象存储在内存中。你是如何“存储”它的?
  • 目前,我只有一个发布请求,它调用了一个从文件加载数据帧的函数,根据请求对其进行过滤,并返回所需的信息。该文件永远不会真正存储在内存中,因为它是在函数调用中加载的。我想我最困惑的是我实际上能够在 django 项目中实例化一个对象,我可以确保在运行时实例化并且可以通过我的请求访问。
  • 我通常在AppConfig的ready方法中设置这样的变量。这个 SO 问题解决了这个问题:stackoverflow.com/questions/28907933/…

标签: python django geopandas shapely


【解决方案1】:

由于 Django 的性质,全局变量并不能很好地工作。我以两种不同的方式解决了这个问题。第一个是只使用 django 会话。这样,您想要全局存储的对象现在只需在您网站上的每个会话中加载一次。第二个也是更有效的选择是使用缓存服务器,Redis 或 memcached。这将允许您在所有会话中非常快速地存储和获取您的对象,并将最大程度地提高性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2010-11-15
    • 2020-11-19
    相关资源
    最近更新 更多