diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-10-04 05:12:35 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-10-04 05:12:35 +0300 |
commit | e0e7a5522f20699e4ffeeef793545f954db790da (patch) | |
tree | b9be416df315da196ef2b478c5d5d1e93fec1709 /build_files | |
parent | e7274dedc4475e15cd06a7c83ec9e0d477f13314 (diff) |
project_source_info: queue_processes() now waits for jobs to finish
queue_processes() - used for some of the "make check_*" utilities,
wasn't waiting for all jobs to finish before returning.
This conflicted with running cleanup operations.
Diffstat (limited to 'build_files')
-rw-r--r-- | build_files/cmake/project_source_info.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/build_files/cmake/project_source_info.py b/build_files/cmake/project_source_info.py index d2ed80022ca..c2ba7e5b11c 100644 --- a/build_files/cmake/project_source_info.py +++ b/build_files/cmake/project_source_info.py @@ -243,7 +243,9 @@ def build_defines_as_args() -> List[str]: # use this module. def queue_processes( process_funcs: Sequence[Tuple[Callable[..., subprocess.Popen[Any]], Tuple[Any, ...]]], + *, job_total: int =-1, + sleep: float = 0.1, ) -> None: """ Takes a list of function arg pairs, each function must return a process """ @@ -271,14 +273,20 @@ def queue_processes( if len(processes) <= job_total: break - else: - time.sleep(0.1) + time.sleep(sleep) sys.stdout.flush() sys.stderr.flush() processes.append(func(*args)) + # Don't return until all jobs have finished. + while 1: + processes[:] = [p for p in processes if p.poll() is None] + if not processes: + break + time.sleep(sleep) + def main() -> None: if not os.path.exists(join(CMAKE_DIR, "CMakeCache.txt")): |