Spaces:
Sleeping
Sleeping
import logging | |
from concurrent.futures import ProcessPoolExecutor, as_completed | |
from pathlib import Path | |
from typing import Callable | |
LOGS_DIRECTORY_PATH = Path('../logs') | |
# Number of processes to use when executing functions in parallel. | |
MAX_PROCESS_COUNT = 20 | |
def set_up_logging(log_name): | |
"""Set up a logger that logs to both the console and a file.""" | |
log_path = LOGS_DIRECTORY_PATH / log_name | |
log_path.parent.mkdir(parents=True, exist_ok=True) | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger() | |
# Remove the default handler. | |
logger.handlers.clear() | |
stream_handler = logging.StreamHandler() | |
stream_handler.setLevel(logging.INFO) | |
stream_formatter = logging.Formatter( | |
'%(asctime)s - %(levelname)s - %(message)s', datefmt='%H:%M:%S') | |
stream_handler.setFormatter(stream_formatter) | |
logger.addHandler(stream_handler) | |
file_handler = logging.FileHandler(log_path) | |
file_handler.setLevel(logging.INFO) | |
file_formatter = logging.Formatter( | |
'%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
datefmt='%Y-%m-%d %H:%M:%S') | |
file_handler.setFormatter(file_formatter) | |
logger.addHandler(file_handler) | |
return logger | |
def strip_and_remove_empty_strings(strings): | |
"""Strip a list of strings and remove empty strings.""" | |
strings = [string.strip() for string in strings] | |
strings = [string for string in strings if string] | |
return strings | |
def execute_function_in_parallel(function: Callable, *argument_lists, | |
logger=None): | |
"""Execute a function in parallel using multiple processes.""" | |
with ProcessPoolExecutor(max_workers=MAX_PROCESS_COUNT) as executor: | |
futures = [executor.submit(function, *arguments) | |
for arguments in zip(*argument_lists)] | |
results = [] | |
for future in as_completed(futures): | |
try: | |
result = future.result() | |
results.append(result) | |
except Exception as exception: | |
if logger: | |
logger.exception('Exception') | |
raise exception | |
return results |