缓存来自Python请求的响应

问题描述 投票:0回答:1

我正在用 python 编写一些后端脚本,这些脚本必须与使用 django 的 Web 界面相结合。

Web 应用程序允许查看来自不同 Web 服务的图层。作为我任务的一部分,我开发了一个工具,可以从地理服务器(WCS 服务)请求高程数据,然后根据用户在前端绘制的先前线条,能够生成基础数据的横截面.

所以,简而言之:当用户在图层上绘制一条线,然后单击绘制配置文件时,我的函数会请求数据,在关联的栅格/图层时与该线相交,并向前端返回一个图形。

这种方法的问题在于,每次用户单击“draw-profile”时,都会再次发出请求,这需要一些时间。

发出请求后,数据将存储在

DTM object
属性中的
self.raster
(我创建的类)中。

请求数据的函数的简化版本如下所示。

def get_dtm_from_wcs100(
    self,
    raster_source: str = "YY",
    layer: str = "XX",
    format: str = "image/tiff",
    version: str = "1.0.0",
    resx: int = 1,
    resy: int = 1,
) -> None:
    """
    Get raster and metadata from a WCS service

    Parameters
    ----------
    raster_source : str, optional
        URL of WCS service. The default is "YY" which is the company geoserver
    layer : str, optional
        CoverageID. The default is 'XX'.
    format : str, optional
        File type of the request. The default is 'image/tiff'.
    version : str, optional
        Version of the WCS protocol. The default is "1.0.0".
    resx : int, optional
        Pixel resolution in x-coordinate. The default is 1.
    resy : int, optional
        Pixel resolution in y-coordinate. The default is 1.

    Returns
    -------
    None.

    """

    try:
        # Connect to WCS and try getting a coverage
        wcs = WebCoverageService(raster_source, version=version)
        response = wcs.getCoverage(
            identifier=layer,
            bbox=self.bbox,
            crs=self.epsg,
            format=format,
            resx=resx,
            resy=resy,
        )

    except Exception as e:
        raise Exception("An unexpected error has ocurred:", e)

    else:
        self._read_response(response)
        self._set_masked_raster()

self._read_response(response)
运行时,
self.raster
(
numpy array
) 属性被填充。

你知道我可以做什么才能以某种方式存储此响应,而不必每次我想绘制个人资料时都调用它吗?

python django caching persistence
1个回答
0
投票

你可以使用Python的

@cache
functools
装饰器。 https://docs.python.org/3/library/functools.html

© www.soinside.com 2019 - 2024. All rights reserved.