隔离虎牙宝典批量任务WSS会话

This commit is contained in:
yml2213
2026-09-01 12:25:03 +08:00
parent 2fca1210bb
commit 90ce72fa15
+12 -4
View File
@@ -46,7 +46,7 @@ class HuyaBatchRunnerCore:
self._stop = threading.Event() self._stop = threading.Event()
self._counter_lock = threading.Lock() self._counter_lock = threading.Lock()
self._started = 0 self._started = 0
self._wss_sessions: list[Any] = [] self._wss_sessions = threading.local()
def stop(self): def stop(self):
self._stop.set() self._stop.set()
@@ -61,9 +61,16 @@ class HuyaBatchRunnerCore:
kind=kind, kind=kind,
logger=lambda message: self._push_log("info", f"[{uid}] {message}"), logger=lambda message: self._push_log("info", f"[{uid}] {message}"),
) )
self._wss_sessions.append(session) self._session_bucket().append(session)
return session return session
def _session_bucket(self) -> list[Any]:
bucket = getattr(self._wss_sessions, "items", None)
if bucket is None:
bucket = []
self._wss_sessions.items = bucket
return bucket
def _activity_client(self, uid: int, cookie: str): def _activity_client(self, uid: int, cookie: str):
"""活动任务优先使用最新活动 WSS,建连失败才回退 HTTP。""" """活动任务优先使用最新活动 WSS,建连失败才回退 HTTP。"""
from core.huya.http_client import HuyaHttpClient from core.huya.http_client import HuyaHttpClient
@@ -79,12 +86,13 @@ class HuyaBatchRunnerCore:
return HuyaHttpClient(logger=lambda msg: self._push_log("info", f"[{uid}] {msg}")) return HuyaHttpClient(logger=lambda msg: self._push_log("info", f"[{uid}] {msg}"))
def _close_wss_sessions(self): def _close_wss_sessions(self):
for session in reversed(self._wss_sessions): bucket = self._session_bucket()
for session in reversed(bucket):
try: try:
session.close() session.close()
except Exception: # noqa: BLE001 - cleanup must not mask task status except Exception: # noqa: BLE001 - cleanup must not mask task status
logger.debug("[huya] WSS 会话清理异常") logger.debug("[huya] WSS 会话清理异常")
self._wss_sessions.clear() bucket.clear()
def _push_log(self, level: str, message: str): def _push_log(self, level: str, message: str):
if level == "result": if level == "result":