36 lines
974 B
Python
36 lines
974 B
Python
import traceback
|
|
from typing import Callable, Iterable, TypeVar
|
|
|
|
from ..logger import get_logger
|
|
from .worker_exception import WorkerException
|
|
|
|
logger = get_logger("parallel_map")
|
|
|
|
T = TypeVar("T")
|
|
V = TypeVar("V")
|
|
|
|
|
|
def manage_serial(
|
|
*,
|
|
function: Callable[[T], V],
|
|
input_values: Iterable[T],
|
|
ignore_exceptions: bool,
|
|
) -> Iterable[V]:
|
|
try:
|
|
for v in input_values:
|
|
try:
|
|
yield function(v)
|
|
except Exception as e:
|
|
if not ignore_exceptions:
|
|
raise WorkerException from e
|
|
else:
|
|
logger.error(
|
|
f"Exception {e} encountered in worker, traceback:\n{traceback.format_exc()}"
|
|
)
|
|
except Exception as e:
|
|
if not ignore_exceptions:
|
|
raise
|
|
else:
|
|
logger.error(
|
|
f"Exception {e} encountered in input, traceback:\n{traceback.format_exc()}"
|
|
)
|