def execute_jobs( job_specs: Iterable[JobSpec], dry_run: bool = False, caliban_config: Optional[Dict[str, Any]] = None, ): '''executes a sequence of jobs based on job specs Arg: job_specs: specifications for jobs to be executed dry_run: if True, only print what would be done caliban_config: caliban configuration data ''' caliban_config = caliban_config or {} with ut.tqdm_logging() as orig_stream: pbar = tqdm.tqdm(logged_job_specs(job_specs), file=orig_stream, total=len(job_specs), ascii=True, unit="experiment", desc="Executing") for idx, job_spec in enumerate(pbar, 1): command = job_spec.spec['command'] logging.info(f'Running command: {" ".join(command)}') if not dry_run: _, ret_code = ufs.capture_stdout(command, "", ut.TqdmFile(sys.stderr)) else: ret_code = 0 j = Job(spec=job_spec, container=job_spec.spec['container'], details={'ret_code': ret_code}, status=JobStatus.SUCCEEDED if ret_code == 0 else JobStatus.FAILED) local_callback(idx=idx, job=j) if dry_run: logging.info( t.yellow(f'\nTo build your image and execute these jobs, ' f'run your command again without {c.DRY_RUN_FLAG}\n')) return None
def execute_requests( requests: Iterable[Tuple[Any, ht.JobSpec, Any]], count: Optional[int] = None, num_retries: Optional[int] = None, ) -> None: """Execute all batches in the supplied generator of batch requests. Results aren't returned directly; the callbacks passed to each request when it was generated handle any response or exception. """ with ut.tqdm_logging() as orig_stream: pbar = tqdm.tqdm( requests, file=orig_stream, total=count, unit="requests", desc="submitting", ascii=True, ) for req, spec, cb in pbar: pbar.set_description(f'Submitting {spec.spec["jobId"]}') execute(req, cb, num_retries=num_retries)