run_in_pool bounded thread scheduler
Python
"""Run many zero-argument tasks on a bounded thread pool, keeping errors."""
from concurrent.futures import ThreadPoolExecutor, as_completed
from dataclasses import dataclass
from typing import Any, Callable, Iterable
@dataclass
class TaskResult:
"""Outcome of one task: exactly one of value/error is meaningful."""
index: int
value: Any = None
error: BaseException | None = None
@property
def ok(self) -> bool:
return self.error is None
def run_in_pool(
tasks: Iterable[Callable[[], Any]], *, workers: int = 4
) -> list[TaskResult]:
"""Execute tasks concurrently; results follow input order, never raise."""
todo = list(tasks)
results = [TaskResult(index=index) for index in range(len(todo))]
with ThreadPoolExecutor(max_workers=max(1, workers)) as pool:
futures = {pool.submit(task): index for index, task in enumerate(todo)}
for future in as_completed(futures):
slot = results[futures[future]]
try:
slot.value = future.result()
except Exception as exc: # report, do not abort the batch
slot.error = exc
return results