diff options
| author | Elizabeth <me@liz.coffee> | 2025-06-02 15:54:32 -0700 |
|---|---|---|
| committer | Elizabeth <me@liz.coffee> | 2025-06-02 15:54:32 -0700 |
| commit | 03646d1e891271339ca256fadd15eaa8ac678911 (patch) | |
| tree | 5df23a874fa1ae5c62dad318d9098225852f2137 /dots_manager/parallel.py | |
| parent | d098e94ad102da9d018acca72ca5a5c554d25a01 (diff) | |
| download | dots-03646d1e891271339ca256fadd15eaa8ac678911.tar.gz dots-03646d1e891271339ca256fadd15eaa8ac678911.zip | |
Make it a python package
Diffstat (limited to 'dots_manager/parallel.py')
| -rw-r--r-- | dots_manager/parallel.py | 21 |
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)] |
