mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-07-08 22:15:04 +08:00
Merge pull request #4548 from cddjr/set_lock_timeout
This commit is contained in:
@@ -39,6 +39,8 @@ class SubscribeChain(ChainBase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
_rlock = threading.RLock()
|
_rlock = threading.RLock()
|
||||||
|
# 避免莫名原因导致长时间持有锁
|
||||||
|
_LOCK_TIMOUT = 3600 * 2
|
||||||
|
|
||||||
def add(self, title: str, year: str,
|
def add(self, title: str, year: str,
|
||||||
mtype: MediaType = None,
|
mtype: MediaType = None,
|
||||||
@@ -279,8 +281,15 @@ class SubscribeChain(ChainBase):
|
|||||||
:param manual: 是否手动搜索
|
:param manual: 是否手动搜索
|
||||||
:return: 更新订阅状态为R或删除订阅
|
:return: 更新订阅状态为R或删除订阅
|
||||||
"""
|
"""
|
||||||
with self._rlock:
|
lock_acquired = False
|
||||||
logger.debug(f"search lock acquired at {datetime.now()}")
|
try:
|
||||||
|
if lock_acquired := self._rlock.acquire(
|
||||||
|
blocking=True, timeout=self._LOCK_TIMOUT
|
||||||
|
):
|
||||||
|
logger.debug(f"search lock acquired at {datetime.now()}")
|
||||||
|
else:
|
||||||
|
logger.warn("search上锁超时")
|
||||||
|
|
||||||
subscribeoper = SubscribeOper()
|
subscribeoper = SubscribeOper()
|
||||||
if sid:
|
if sid:
|
||||||
subscribe = subscribeoper.get(sid)
|
subscribe = subscribeoper.get(sid)
|
||||||
@@ -437,8 +446,10 @@ class SubscribeChain(ChainBase):
|
|||||||
finally:
|
finally:
|
||||||
subscribes.clear()
|
subscribes.clear()
|
||||||
del subscribes
|
del subscribes
|
||||||
|
finally:
|
||||||
logger.debug(f"search Lock released at {datetime.now()}")
|
if lock_acquired:
|
||||||
|
self._rlock.release()
|
||||||
|
logger.debug(f"search Lock released at {datetime.now()}")
|
||||||
|
|
||||||
# 如果不是大内存模式,进行垃圾回收
|
# 如果不是大内存模式,进行垃圾回收
|
||||||
if not settings.BIG_MEMORY_MODE:
|
if not settings.BIG_MEMORY_MODE:
|
||||||
@@ -565,8 +576,14 @@ class SubscribeChain(ChainBase):
|
|||||||
logger.warn('没有缓存资源,无法匹配订阅')
|
logger.warn('没有缓存资源,无法匹配订阅')
|
||||||
return
|
return
|
||||||
|
|
||||||
with self._rlock:
|
lock_acquired = False
|
||||||
logger.debug(f"match lock acquired at {datetime.now()}")
|
try:
|
||||||
|
if lock_acquired := self._rlock.acquire(
|
||||||
|
blocking=True, timeout=self._LOCK_TIMOUT
|
||||||
|
):
|
||||||
|
logger.debug(f"match lock acquired at {datetime.now()}")
|
||||||
|
else:
|
||||||
|
logger.warn("match上锁超时")
|
||||||
|
|
||||||
# 预识别所有未识别的种子
|
# 预识别所有未识别的种子
|
||||||
processed_torrents: Dict[str, List[Context]] = {}
|
processed_torrents: Dict[str, List[Context]] = {}
|
||||||
@@ -822,8 +839,10 @@ class SubscribeChain(ChainBase):
|
|||||||
del processed_torrents
|
del processed_torrents
|
||||||
subscribes.clear()
|
subscribes.clear()
|
||||||
del subscribes
|
del subscribes
|
||||||
|
finally:
|
||||||
logger.debug(f"match Lock released at {datetime.now()}")
|
if lock_acquired:
|
||||||
|
self._rlock.release()
|
||||||
|
logger.debug(f"match Lock released at {datetime.now()}")
|
||||||
|
|
||||||
def check(self):
|
def check(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -562,9 +562,12 @@ class FileManagerModule(_ModuleBase):
|
|||||||
if not settings.LOCAL_EXISTS_SEARCH:
|
if not settings.LOCAL_EXISTS_SEARCH:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
logger.debug(f"正在本地媒体库中查找 {mediainfo.title_year}...")
|
||||||
|
|
||||||
# 检查媒体库
|
# 检查媒体库
|
||||||
fileitems = self.media_files(mediainfo)
|
fileitems = self.media_files(mediainfo)
|
||||||
if not fileitems:
|
if not fileitems:
|
||||||
|
logger.debug(f"{mediainfo.title_year} 不在本地媒体库中")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if mediainfo.type == MediaType.MOVIE:
|
if mediainfo.type == MediaType.MOVIE:
|
||||||
|
|||||||
@@ -219,8 +219,11 @@ class U115Pan(StorageBase, metaclass=Singleton):
|
|||||||
|
|
||||||
# 处理速率限制
|
# 处理速率限制
|
||||||
if resp.status_code == 429:
|
if resp.status_code == 429:
|
||||||
reset_time = int(resp.headers.get("X-RateLimit-Reset", 60))
|
reset_time = 5 + int(resp.headers.get("X-RateLimit-Reset", 60))
|
||||||
time.sleep(reset_time + 5)
|
logger.debug(
|
||||||
|
f"【115】{method} 请求 {endpoint} 限流,等待{reset_time}秒后重试"
|
||||||
|
)
|
||||||
|
time.sleep(reset_time)
|
||||||
return self._request_api(method, endpoint, result_key, **kwargs)
|
return self._request_api(method, endpoint, result_key, **kwargs)
|
||||||
|
|
||||||
# 处理请求错误
|
# 处理请求错误
|
||||||
|
|||||||
Reference in New Issue
Block a user