aboutsummaryrefslogtreecommitdiff
path: root/dots_manager/parallel.py
diff options
context:
space:
mode:
authorElizabeth <me@liz.coffee>2025-06-02 15:54:32 -0700
committerElizabeth <me@liz.coffee>2025-06-02 15:54:32 -0700
commit03646d1e891271339ca256fadd15eaa8ac678911 (patch)
tree5df23a874fa1ae5c62dad318d9098225852f2137 /dots_manager/parallel.py
parentd098e94ad102da9d018acca72ca5a5c554d25a01 (diff)
downloaddots-03646d1e891271339ca256fadd15eaa8ac678911.tar.gz
dots-03646d1e891271339ca256fadd15eaa8ac678911.zip
Make it a python package
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)]