From f6f1ad5750ddb9d81f793b15c98e0e6df444f35f Mon Sep 17 00:00:00 2001 From: Tyler Date: Fri, 27 Dec 2019 23:58:31 -0800 Subject: [PATCH] made min disk usage a thread class with resume features --- src/dandere2xlib/mindiskusage.py | 40 +++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/dandere2xlib/mindiskusage.py b/src/dandere2xlib/mindiskusage.py index 3d25e523..94b870a9 100644 --- a/src/dandere2xlib/mindiskusage.py +++ b/src/dandere2xlib/mindiskusage.py @@ -7,9 +7,10 @@ from dandere2xlib.utils.dandere2x_utils import get_lexicon_value # from wrappers.cv2.progress_frame_extractor_cv2 import ProgressiveFramesExtractorCV2 from wrappers.ffmpeg.progressive_frame_extractor_ffmpeg import ProgressiveFramesExtractorFFMPEG +from dandere2xlib.utils.thread_utils import CancellationToken -class MinDiskUsage: +class MinDiskUsage(threading.Thread): """ A class to facilitate the actions needed to operate min_disk_usage. @@ -25,6 +26,27 @@ def __init__(self, context: Context): self.max_frames_ahead = self.context.max_frames_ahead self.frame_count = context.frame_count self.progressive_frame_extractor = ProgressiveFramesExtractorFFMPEG(self.context, self.context.input_file) + self.start_frame = 1 + + self.progressive_frame_extractor.start_task() + # Threading Specific + + self.alive = True + self.cancel_token = CancellationToken() + self._stopevent = threading.Event() + threading.Thread.__init__(self, name="ResidualThread") + + def join(self, timeout=None): + threading.Thread.join(self, timeout) + + def kill(self): + self.alive = False + self.progressive_frame_extractor.kill_task() + self.cancel_token.cancel() + self._stopevent.set() + + def set_resume_frame(self, resume_frame: int): + self.start_frame = resume_frame """ todo: @@ -39,12 +61,15 @@ def run(self): When it does, delete the used files and extract the needed frame. """ logger = logging.getLogger(__name__) - for x in range(1, self.frame_count - self.context.max_frames_ahead + 1): + for x in range(self.start_frame, self.frame_count - self.context.max_frames_ahead + 1): logger.info("on frame x: " + str(x)) # wait for signal to get ahead of MinDiskUsage - while x >= self.context.signal_merged_count: + while x >= self.context.signal_merged_count and self.alive: time.sleep(.00001) + if not self.alive: + return + # when it does get ahead, extract the next frame self.progressive_frame_extractor.next_frame() self.__delete_used_files(x) @@ -53,7 +78,7 @@ def extract_initial_frames(self): """ Extract 'max_frames_ahead' needed for Dandere2x to start with. - Author: Tremex. + Author: Tremex. """ max_frames_ahead = self.context.max_frames_ahead @@ -101,10 +126,9 @@ def __delete_used_files(self, remove_before): remove.append(upscaled_file_r) # remove - threading.Thread(target=self.__delete_files_from_list, args=(remove,), daemon=True).start() + threading.Thread(target=self.__delete_files_from_list, args=(remove,), daemon=True, name="mindiskusage").start() - @staticmethod - def __delete_files_from_list(files): + def __delete_files_from_list(self, files): """ Delete all the files in a given list. @@ -112,7 +136,7 @@ def __delete_files_from_list(files): """ for item in files: c = 0 - while True: + while True and self.alive: if os.path.isfile(item): try: os.remove(item)