fix deadlock

This commit is contained in:
jxxghp
2026-01-21 22:46:04 +08:00
parent 46466624ae
commit abbd2253ad
+28 -43
View File
@@ -221,9 +221,8 @@ class JobManager:
""" """
移除作业 移除作业
""" """
__mediaid__ = self.__get_media_id(media=task.mediainfo, season=task.meta.begin_season)
with job_lock: with job_lock:
# 移除作业 __mediaid__ = self.__get_media_id(media=task.mediainfo, season=task.meta.begin_season)
if __mediaid__ in self._job_view: if __mediaid__ in self._job_view:
# 移除季集信息 # 移除季集信息
if __mediaid__ in self._season_episodes: if __mediaid__ in self._season_episodes:
@@ -320,55 +319,48 @@ class JobManager:
获取某项任务成功的任务 获取某项任务成功的任务
""" """
__mediaid__ = self.__get_media_id(media=media, season=season) __mediaid__ = self.__get_media_id(media=media, season=season)
with job_lock: if __mediaid__ not in self._job_view:
if __mediaid__ not in self._job_view: return []
return [] return [task for task in self._job_view[__mediaid__].tasks if task.state == "completed"]
return [task for task in self._job_view[__mediaid__].tasks if task.state == "completed"]
def all_tasks(self, media: MediaInfo, season: Optional[int] = None) -> List[TransferJobTask]: def all_tasks(self, media: MediaInfo, season: Optional[int] = None) -> List[TransferJobTask]:
""" """
获取全部任务 获取全部任务
""" """
__mediaid__ = self.__get_media_id(media=media, season=season) __mediaid__ = self.__get_media_id(media=media, season=season)
with job_lock: if __mediaid__ not in self._job_view:
if __mediaid__ not in self._job_view: return []
return [] return self._job_view[__mediaid__].tasks
return self._job_view[__mediaid__].tasks
def count(self, media: MediaInfo, season: Optional[int] = None) -> int: def count(self, media: MediaInfo, season: Optional[int] = None) -> int:
""" """
获取某项任务成功总数 获取某项任务成功总数
""" """
__mediaid__ = self.__get_media_id(media=media, season=season) __mediaid__ = self.__get_media_id(media=media, season=season)
with job_lock: if __mediaid__ not in self._job_view:
# 计算状态为完成的任务数 return 0
if __mediaid__ not in self._job_view: return len([task for task in self._job_view[__mediaid__].tasks if task.state == "completed"])
return 0
return len([task for task in self._job_view[__mediaid__].tasks if task.state == "completed"])
def size(self, media: MediaInfo, season: Optional[int] = None) -> int: def size(self, media: MediaInfo, season: Optional[int] = None) -> int:
""" """
获取某项任务成功文件总大小 获取某项任务成功文件总大小
""" """
__mediaid__ = self.__get_media_id(media=media, season=season) __mediaid__ = self.__get_media_id(media=media, season=season)
with job_lock: if __mediaid__ not in self._job_view:
# 计算状态为完成的任务数 return 0
if __mediaid__ not in self._job_view: return sum([
return 0 task.fileitem.size if task.fileitem.size is not None
return sum([ else (
task.fileitem.size if task.fileitem.size is not None SystemUtils.get_directory_size(Path(task.fileitem.path)) if task.fileitem.storage == "local" else 0)
else ( for task in self._job_view[__mediaid__].tasks
SystemUtils.get_directory_size(Path(task.fileitem.path)) if task.fileitem.storage == "local" else 0) if task.state == "completed"
for task in self._job_view[__mediaid__].tasks ])
if task.state == "completed"
])
def total(self) -> int: def total(self) -> int:
""" """
获取所有task任务总数 获取所有task任务总数
""" """
with job_lock: return sum([len(job.tasks) for job in self._job_view.values()])
return sum([len(job.tasks) for job in self._job_view.values()])
def list_jobs(self) -> List[TransferJob]: def list_jobs(self) -> List[TransferJob]:
""" """
@@ -381,8 +373,7 @@ class JobManager:
获取季集清单 获取季集清单
""" """
__mediaid__ = self.__get_media_id(media=media, season=season) __mediaid__ = self.__get_media_id(media=media, season=season)
with job_lock: return self._season_episodes.get(__mediaid__) or []
return self._season_episodes.get(__mediaid__) or []
class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton): class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
@@ -527,8 +518,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
}) })
# 移除已完成的任务 # 移除已完成的任务
with job_lock: self.jobview.remove_job(task)
self.jobview.remove_job(task)
transferhis = TransferHistoryOper() transferhis = TransferHistoryOper()
if not transferinfo.success: if not transferinfo.success:
@@ -568,8 +558,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
)) ))
# 整理失败 # 整理失败
with job_lock: self.jobview.fail_task(task)
self.jobview.fail_task(task)
# 全部整理完成且有成功的任务时 # 全部整理完成且有成功的任务时
if self.jobview.is_finished(task): if self.jobview.is_finished(task):
@@ -579,8 +568,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
return False, transferinfo.message return False, transferinfo.message
# task转移成功 # task转移成功
with job_lock: self.jobview.finish_task(task)
self.jobview.finish_task(task)
logger.info(f"{task.fileitem.name} 入库成功:{transferinfo.target_diritem.path}") logger.info(f"{task.fileitem.name} 入库成功:{transferinfo.target_diritem.path}")
@@ -666,8 +654,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
""" """
添加到作业视图 添加到作业视图
""" """
with job_lock: self.jobview.add_task(task)
self.jobview.add_task(task)
def remove_from_queue(self, fileitem: FileItem): def remove_from_queue(self, fileitem: FileItem):
""" """
@@ -675,8 +662,7 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
""" """
if not fileitem: if not fileitem:
return return
with job_lock: self.jobview.remove_task(fileitem)
self.jobview.remove_task(fileitem)
def __start_transfer(self): def __start_transfer(self):
""" """
@@ -919,9 +905,8 @@ class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton):
finally: finally:
# 移除已完成的任务 # 移除已完成的任务
with job_lock: if self.jobview.is_done(task):
if self.jobview.is_done(task): self.jobview.remove_job(task)
self.jobview.remove_job(task)
def get_queue_tasks(self) -> List[TransferJob]: def get_queue_tasks(self) -> List[TransferJob]:
""" """