fix 优化远程交互内存占用
This commit is contained in:
parent
fbcd5f05c0
commit
ce05b25f87
@ -1,9 +1,11 @@
|
|||||||
|
import pickle
|
||||||
import traceback
|
import traceback
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional, Any, Tuple, List, Set, Union, Dict
|
from typing import Optional, Any, Tuple, List, Set, Union, Dict
|
||||||
|
|
||||||
from ruamel.yaml import CommentedMap
|
from ruamel.yaml import CommentedMap
|
||||||
|
|
||||||
|
from app.core.config import settings
|
||||||
from app.core.context import Context
|
from app.core.context import Context
|
||||||
from app.core.context import MediaInfo, TorrentInfo
|
from app.core.context import MediaInfo, TorrentInfo
|
||||||
from app.core.event import EventManager
|
from app.core.event import EventManager
|
||||||
@ -28,6 +30,23 @@ class ChainBase(AbstractSingleton, metaclass=Singleton):
|
|||||||
self.modulemanager = ModuleManager()
|
self.modulemanager = ModuleManager()
|
||||||
self.eventmanager = EventManager()
|
self.eventmanager = EventManager()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def __load_cache(filename: str) -> Any:
|
||||||
|
"""
|
||||||
|
从本地加载缓存
|
||||||
|
"""
|
||||||
|
cache_path = settings.TEMP_PATH / filename
|
||||||
|
if cache_path.exists():
|
||||||
|
return pickle.load(cache_path.open('rb'))
|
||||||
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def __save_cache(cache: Any, filename: str) -> None:
|
||||||
|
"""
|
||||||
|
保存缓存到本地
|
||||||
|
"""
|
||||||
|
pickle.dump(cache, (settings.TEMP_PATH / filename).open('wb'))
|
||||||
|
|
||||||
def run_module(self, method: str, *args, **kwargs) -> Any:
|
def run_module(self, method: str, *args, **kwargs) -> Any:
|
||||||
"""
|
"""
|
||||||
运行包含该方法的所有模块,然后返回结果
|
运行包含该方法的所有模块,然后返回结果
|
||||||
|
@ -16,7 +16,7 @@ class MessageChain(ChainBase):
|
|||||||
外来消息处理链
|
外来消息处理链
|
||||||
"""
|
"""
|
||||||
# 缓存的用户数据 {userid: {type: str, items: list}}
|
# 缓存的用户数据 {userid: {type: str, items: list}}
|
||||||
_user_cache: Dict[str, dict] = {}
|
_cache_file = "__user_messages__"
|
||||||
# 每页数据量
|
# 每页数据量
|
||||||
_page_size: int = 8
|
_page_size: int = 8
|
||||||
# 当前页面
|
# 当前页面
|
||||||
@ -58,6 +58,9 @@ class MessageChain(ChainBase):
|
|||||||
if not text:
|
if not text:
|
||||||
logger.debug(f'未识别到消息内容::{body}{form}{args}')
|
logger.debug(f'未识别到消息内容::{body}{form}{args}')
|
||||||
return
|
return
|
||||||
|
# 加载缓存
|
||||||
|
user_cache: Dict[str, dict] = self.__load_cache(self._cache_file) or {}
|
||||||
|
# 处理消息
|
||||||
logger.info(f'收到用户消息内容,用户:{userid},内容:{text}')
|
logger.info(f'收到用户消息内容,用户:{userid},内容:{text}')
|
||||||
if text.startswith('/'):
|
if text.startswith('/'):
|
||||||
# 执行命令
|
# 执行命令
|
||||||
@ -72,7 +75,7 @@ class MessageChain(ChainBase):
|
|||||||
|
|
||||||
elif text.isdigit():
|
elif text.isdigit():
|
||||||
# 缓存
|
# 缓存
|
||||||
cache_data: dict = self._user_cache.get(userid)
|
cache_data: dict = user_cache.get(userid)
|
||||||
# 选择项目
|
# 选择项目
|
||||||
if not cache_data \
|
if not cache_data \
|
||||||
or not cache_data.get('items') \
|
or not cache_data.get('items') \
|
||||||
@ -125,7 +128,7 @@ class MessageChain(ChainBase):
|
|||||||
# 搜索结果排序
|
# 搜索结果排序
|
||||||
contexts = self.torrenthelper.sort_torrents(contexts)
|
contexts = self.torrenthelper.sort_torrents(contexts)
|
||||||
# 更新缓存
|
# 更新缓存
|
||||||
self._user_cache[userid] = {
|
user_cache[userid] = {
|
||||||
"type": "Torrent",
|
"type": "Torrent",
|
||||||
"items": contexts
|
"items": contexts
|
||||||
}
|
}
|
||||||
@ -201,7 +204,7 @@ class MessageChain(ChainBase):
|
|||||||
|
|
||||||
elif text.lower() == "p":
|
elif text.lower() == "p":
|
||||||
# 上一页
|
# 上一页
|
||||||
cache_data: dict = self._user_cache.get(userid)
|
cache_data: dict = user_cache.get(userid)
|
||||||
if not cache_data:
|
if not cache_data:
|
||||||
# 没有缓存
|
# 没有缓存
|
||||||
self.post_message(Notification(
|
self.post_message(Notification(
|
||||||
@ -240,7 +243,7 @@ class MessageChain(ChainBase):
|
|||||||
|
|
||||||
elif text.lower() == "n":
|
elif text.lower() == "n":
|
||||||
# 下一页
|
# 下一页
|
||||||
cache_data: dict = self._user_cache.get(userid)
|
cache_data: dict = user_cache.get(userid)
|
||||||
if not cache_data:
|
if not cache_data:
|
||||||
# 没有缓存
|
# 没有缓存
|
||||||
self.post_message(Notification(
|
self.post_message(Notification(
|
||||||
@ -296,7 +299,7 @@ class MessageChain(ChainBase):
|
|||||||
logger.info(f"搜索到 {len(medias)} 条相关媒体信息")
|
logger.info(f"搜索到 {len(medias)} 条相关媒体信息")
|
||||||
# 记录当前状态
|
# 记录当前状态
|
||||||
self._current_meta = meta
|
self._current_meta = meta
|
||||||
self._user_cache[userid] = {
|
user_cache[userid] = {
|
||||||
'type': action,
|
'type': action,
|
||||||
'items': medias
|
'items': medias
|
||||||
}
|
}
|
||||||
@ -307,6 +310,8 @@ class MessageChain(ChainBase):
|
|||||||
title=meta.name,
|
title=meta.name,
|
||||||
items=medias[:self._page_size],
|
items=medias[:self._page_size],
|
||||||
userid=userid, total=len(medias))
|
userid=userid, total=len(medias))
|
||||||
|
# 保存缓存
|
||||||
|
self.__save_cache(user_cache, self._cache_file)
|
||||||
|
|
||||||
def __post_medias_message(self, channel: MessageChannel,
|
def __post_medias_message(self, channel: MessageChannel,
|
||||||
title: str, items: list, userid: str, total: int):
|
title: str, items: list, userid: str, total: int):
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
import json
|
import json
|
||||||
import pickle
|
|
||||||
import re
|
import re
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
|
||||||
from typing import Dict, List, Optional, Union, Tuple
|
from typing import Dict, List, Optional, Union, Tuple
|
||||||
|
|
||||||
from app.chain import ChainBase
|
from app.chain import ChainBase
|
||||||
@ -27,7 +25,7 @@ class SubscribeChain(ChainBase):
|
|||||||
订阅管理处理链
|
订阅管理处理链
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__cache_path: Path = None
|
_cache_file = "__torrents_cache__"
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@ -38,9 +36,6 @@ class SubscribeChain(ChainBase):
|
|||||||
self.message = MessageHelper()
|
self.message = MessageHelper()
|
||||||
self.systemconfig = SystemConfigOper()
|
self.systemconfig = SystemConfigOper()
|
||||||
|
|
||||||
# 缓存路径
|
|
||||||
self.__cache_path = settings.TEMP_PATH / "__torrents_cache__"
|
|
||||||
|
|
||||||
def add(self, title: str, year: str,
|
def add(self, title: str, year: str,
|
||||||
mtype: MediaType = None,
|
mtype: MediaType = None,
|
||||||
tmdbid: int = None,
|
tmdbid: int = None,
|
||||||
@ -302,7 +297,7 @@ class SubscribeChain(ChainBase):
|
|||||||
刷新站点最新资源
|
刷新站点最新资源
|
||||||
"""
|
"""
|
||||||
# 读取缓存
|
# 读取缓存
|
||||||
torrents_cache: Dict[str, List[Context]] = self.__load_cache()
|
torrents_cache: Dict[str, List[Context]] = self.__load_cache(self._cache_file) or {}
|
||||||
|
|
||||||
# 所有站点索引
|
# 所有站点索引
|
||||||
indexers = self.siteshelper.get_indexers()
|
indexers = self.siteshelper.get_indexers()
|
||||||
@ -368,21 +363,7 @@ class SubscribeChain(ChainBase):
|
|||||||
# 从缓存中匹配订阅
|
# 从缓存中匹配订阅
|
||||||
self.__match(torrents_cache)
|
self.__match(torrents_cache)
|
||||||
# 保存缓存到本地
|
# 保存缓存到本地
|
||||||
self.__save_cache(torrents_cache)
|
self.__save_cache(torrents_cache, self._cache_file)
|
||||||
|
|
||||||
def __load_cache(self) -> Dict[str, List[Context]]:
|
|
||||||
"""
|
|
||||||
从本地加载缓存
|
|
||||||
"""
|
|
||||||
if self.__cache_path.exists():
|
|
||||||
return pickle.load(self.__cache_path.open('rb')) or {}
|
|
||||||
return {}
|
|
||||||
|
|
||||||
def __save_cache(self, cache: Dict[str, List[Context]]):
|
|
||||||
"""
|
|
||||||
保存缓存到本地
|
|
||||||
"""
|
|
||||||
pickle.dump(cache, self.__cache_path.open('wb'))
|
|
||||||
|
|
||||||
def __match(self, torrents_cache: Dict[str, List[Context]]):
|
def __match(self, torrents_cache: Dict[str, List[Context]]):
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user