From 3bdd96a8ee264b05d6f03c0222678b45b80727d7 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 26 Oct 2023 17:07:01 +0800 Subject: [PATCH] =?UTF-8?q?fix=20#951=20=E4=B8=8D=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E9=94=99=E8=AF=AF=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?TMDB=E4=BF=A1=E6=81=AFNone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/themoviedb/tmdb_cache.py | 3 ++- app/modules/themoviedb/tmdbv3api/tmdb.py | 6 +++--- app/utils/common.py | 20 ++++++++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/modules/themoviedb/tmdb_cache.py b/app/modules/themoviedb/tmdb_cache.py index d832ab28..8adab703 100644 --- a/app/modules/themoviedb/tmdb_cache.py +++ b/app/modules/themoviedb/tmdb_cache.py @@ -144,7 +144,8 @@ class TmdbCache(metaclass=Singleton): "backdrop_path": info.get("backdrop_path"), CACHE_EXPIRE_TIMESTAMP_STR: int(time.time()) + EXPIRE_TIMESTAMP } - else: + elif info is not None: + # None时不缓存,此时代表网络错误,允许重复请求 self._meta_data[self.__get_key(meta)] = {'id': 0} def save(self, force: bool = False) -> None: diff --git a/app/modules/themoviedb/tmdbv3api/tmdb.py b/app/modules/themoviedb/tmdbv3api/tmdb.py index 2c8cf713..d52c7752 100644 --- a/app/modules/themoviedb/tmdbv3api/tmdb.py +++ b/app/modules/themoviedb/tmdbv3api/tmdb.py @@ -4,11 +4,11 @@ import logging import os import time from datetime import datetime -from functools import lru_cache import requests import requests.exceptions +from app.utils.common import lru_cache_without_none from app.utils.http import RequestUtils from .exceptions import TMDbException @@ -137,11 +137,11 @@ class TMDb(object): def cache(self, cache): os.environ[self.TMDB_CACHE_ENABLED] = str(cache) - @lru_cache(maxsize=REQUEST_CACHE_MAXSIZE) + @lru_cache_without_none(maxsize=REQUEST_CACHE_MAXSIZE) def cached_request(self, method, url, data, json, _ts=datetime.strftime(datetime.now(), '%Y%m%d')): """ - 缓存请求,时间默认1天 + 缓存请求,时间默认1天,None不缓存 """ return self.request(method, url, data, json) diff --git a/app/utils/common.py b/app/utils/common.py index 606fef6d..1fb536aa 100644 --- a/app/utils/common.py +++ b/app/utils/common.py @@ -1,5 +1,6 @@ import time from typing import Any +from functools import lru_cache def retry(ExceptionToCheck: Any, @@ -32,3 +33,22 @@ def retry(ExceptionToCheck: Any, return f_retry return deco_retry + + +def lru_cache_without_none(maxsize=None, typed=False): + """ + 不缓存None的lru_cache + :param maxsize: 缓存大小 + :param typed: 是否区分参数类型 + """ + def decorator(func): + cache = lru_cache(maxsize=maxsize, typed=typed)(func) + + def wrapper(*args, **kwargs): + result = cache(*args, **kwargs) + if result is not None: + return result + + return wrapper + + return decorator