mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-03-30 08:40:54 +08:00
perf: optimize renamer with batch database queries and reduced blocking
- Add batch offset lookup to reduce N database connections to 1-3 per cycle - Add search_by_qb_hashes() and search_ids() for batch queries - Throttle pending rename cache cleanup to once per minute max - Use exponential backoff for rename verification (0.1s->0.2s->0.4s) - Skip verification for subtitle renames to reduce latency Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -36,9 +36,7 @@ class TorrentDatabase:
|
||||
logger.debug(f"Update {data.name} in database.")
|
||||
|
||||
def search(self, _id: int) -> Torrent | None:
|
||||
result = self.session.execute(
|
||||
select(Torrent).where(Torrent.id == _id)
|
||||
)
|
||||
result = self.session.execute(select(Torrent).where(Torrent.id == _id))
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
def search_all(self) -> list[Torrent]:
|
||||
@@ -46,9 +44,7 @@ class TorrentDatabase:
|
||||
return list(result.scalars().all())
|
||||
|
||||
def search_rss(self, rss_id: int) -> list[Torrent]:
|
||||
result = self.session.execute(
|
||||
select(Torrent).where(Torrent.rss_id == rss_id)
|
||||
)
|
||||
result = self.session.execute(select(Torrent).where(Torrent.rss_id == rss_id))
|
||||
return list(result.scalars().all())
|
||||
|
||||
def check_new(self, torrents_list: list[Torrent]) -> list[Torrent]:
|
||||
@@ -62,16 +58,21 @@ class TorrentDatabase:
|
||||
|
||||
def search_by_qb_hash(self, qb_hash: str) -> Torrent | None:
|
||||
"""Find torrent by qBittorrent hash."""
|
||||
result = self.session.execute(
|
||||
select(Torrent).where(Torrent.qb_hash == qb_hash)
|
||||
)
|
||||
result = self.session.execute(select(Torrent).where(Torrent.qb_hash == qb_hash))
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
def search_by_qb_hashes(self, qb_hashes: list[str]) -> list[Torrent]:
|
||||
"""Find torrents by multiple qBittorrent hashes (batch query)."""
|
||||
if not qb_hashes:
|
||||
return []
|
||||
result = self.session.execute(
|
||||
select(Torrent).where(Torrent.qb_hash.in_(qb_hashes))
|
||||
)
|
||||
return list(result.scalars().all())
|
||||
|
||||
def search_by_url(self, url: str) -> Torrent | None:
|
||||
"""Find torrent by URL."""
|
||||
result = self.session.execute(
|
||||
select(Torrent).where(Torrent.url == url)
|
||||
)
|
||||
result = self.session.execute(select(Torrent).where(Torrent.url == url))
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
def update_qb_hash(self, torrent_id: int, qb_hash: str) -> bool:
|
||||
|
||||
Reference in New Issue
Block a user