summaryrefslogtreecommitdiff
path: root/dots_manager/parallel.py
diff options
context:
space:
mode:
Diffstat (limited to 'dots_manager/parallel.py')
-rw-r--r--dots_manager/parallel.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/dots_manager/parallel.py b/dots_manager/parallel.py
new file mode 100644
index 0000000..e50c5a8
--- /dev/null
+++ b/dots_manager/parallel.py
@@ -0,0 +1,21 @@
+from concurrent.futures import ThreadPoolExecutor, as_completed
+from typing import Callable, List, Optional, TypeVar
+from .config import Config
+from .env import Environment
+
+T = TypeVar("T")
+R = TypeVar("R")
+
+
+def parallelize(
+ worker: Callable[[T], R],
+ items: List[T],
+ env: Environment,
+ executor: Optional[ThreadPoolExecutor] = None,
+) -> List[R]:
+ if executor is None:
+ executor = ThreadPoolExecutor(max_workers=Config.max_workers)
+ with executor as exec:
+ futures = [exec.submit(worker, item) for item in items]
+ env.logger.info(f"submitted {len(futures)} tasks to executor ₰˜.༄")
+ return [f.result() for f in as_completed(futures)]