diff --git a/devservices/commands/down.py b/devservices/commands/down.py index 039c788..0d670e9 100644 --- a/devservices/commands/down.py +++ b/devservices/commands/down.py @@ -305,6 +305,14 @@ def _bring_down_dependency( return run_cmd(cmd.full_command, current_env) +def _stop_supervisor_program( + manager: SupervisorManager, program: str, status: Status +) -> None: + """Stop a single supervisor program.""" + status.info(f"Stopping {program}") + manager.stop_process(program) + + def bring_down_supervisor_programs( supervisor_programs: list[str], service: Service, status: Status ) -> None: @@ -318,9 +326,13 @@ def bring_down_supervisor_programs( service_name=service.name, ) - for program in supervisor_programs: - status.info(f"Stopping {program}") - manager.stop_process(program) + with concurrent.futures.ThreadPoolExecutor() as executor: + futures = [ + executor.submit(_stop_supervisor_program, manager, program, status) + for program in supervisor_programs + ] + for future in concurrent.futures.as_completed(futures): + _ = future.result() status.info("Stopping supervisor daemon") manager.stop_supervisor_daemon() diff --git a/devservices/commands/up.py b/devservices/commands/up.py index 98554ef..259e799 100644 --- a/devservices/commands/up.py +++ b/devservices/commands/up.py @@ -381,6 +381,14 @@ def bring_up_docker_compose_services( exit(1) +def _start_supervisor_program( + manager: SupervisorManager, program: str, status: Status +) -> None: + """Start a single supervisor program.""" + status.info(f"Starting {program}") + manager.start_process(program) + + def bring_up_supervisor_programs( service: Service, supervisor_programs: list[str], status: Status ) -> None: @@ -403,6 +411,10 @@ def bring_up_supervisor_programs( status.info("Starting supervisor daemon") manager.start_supervisor_daemon() - for program in supervisor_programs: - status.info(f"Starting {program}") - manager.start_process(program) + with concurrent.futures.ThreadPoolExecutor() as executor: + futures = [ + executor.submit(_start_supervisor_program, manager, program, status) + for program in supervisor_programs + ] + for future in concurrent.futures.as_completed(futures): + _ = future.result()