From ae6f6f6b075c8d781e0684e99c4e523b230ae5df Mon Sep 17 00:00:00 2001 From: Xevion Date: Sat, 9 Nov 2019 18:06:38 -0600 Subject: [PATCH] threading and adjust logging level to be module logging now only reports module level stuff, no longer XMP writing or RawPy warnings --- phototag/__init__.py | 2 +- phototag/app.py | 25 ++++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/phototag/__init__.py b/phototag/__init__.py index f31be03..366dea9 100644 --- a/phototag/__init__.py +++ b/phototag/__init__.py @@ -7,8 +7,8 @@ from . import config # Logging and Progressbar work progressbar.streams.wrap_stderr() -logging.basicConfig(level=logging.INFO) log = logging.getLogger('init') +log.setLevel(logging.INFO) log.info('Progressbar/Logging ready.') # Path Constants diff --git a/phototag/app.py b/phototag/app.py index f3bb62a..fd1b1ab 100644 --- a/phototag/app.py +++ b/phototag/app.py @@ -8,6 +8,7 @@ import progressbar import shutil import logging +from threading import Thread from google.cloud import vision from package import xmp from PIL import Image @@ -35,16 +36,22 @@ def run(): if not os.path.exists(TEMP_PATH): log.info('Creating temporary processing directory') os.makedirs(TEMP_PATH) - + try: - # Process files - for index, file in progressbar.progressbar(list(enumerate(select)), redirect_stdout=True, term_width=110): - _, ext = os.path.splitext(file) - ext = ext[1:].lower() - if ext in LOSSY_EXTS or ext in RAW_EXTS: - process = FileProcessor(file) - log.info(f"Processing file '{file}'...") - process.run(client) + # Process files via Threading + processors = [FileProcessor(file) for file in select] + threads = [ + Thread(target=process.run, args=(client,)) for process in processors + ] + # Start + for i, thread in enumerate(threads): + log.info(f"Processing file '{processors[i].file_name}'...") + thread.start() + # Wait + for thread in threads: + thread.join() + # for process in progressbar.progressbar(processors, redirect_stdout=True, term_width=110): + except Exception as error: log.error(str(error)) log.warning(