Пример #1
0
def job_info(job: Job):
    """ Prints information about given job to stdout

    :param job(Job):
    """
    from sisyphus import tools
    print("Job id: %s" % job._sis_id())
    print("Arguments:")
    for k, v in job._sis_kwargs.items():
        print("  %s : %s" % (k, str(v)))

    print("Inputs:")
    for name, value in job.__dict__.items():
        if not name.startswith('_sis_'):
            paths = tools.extract_paths(value)
            for path in paths:
                if path.creator is not job:
                    if path.creator is None:
                        print("  %s : %s" % (name, path.path))
                    else:
                        print("  %s : %s %s" %
                              (name, path.creator._sis_id(), path.path))

    print("Outputs:")
    for name, value in job.__dict__.items():
        if not name.startswith('_sis_'):
            paths = tools.extract_paths(value)
            for path in paths:
                if path.creator is job:
                    print("  %s : %s" % (name, path.path))

    print("Job dir: %s" % os.path.abspath(job._sis_path()))
    print("Work dir: %s" % job._sis_path(gs.WORK_DIR))
Пример #2
0
def submit_next_task(job: Job, setup_directory=True):
    if not job._sis_runnable():
        logging.warning('Job is not runnable')
        return
    if setup_directory:
        job._sis_setup_directory()
    cached_engine().start_engine()
    task = job._sis_next_task()
    if task is None:
        logging.warning('No task to run')
    else:
        cached_engine().submit(task)
Пример #3
0
def run_job(job: Job,
            task_name: str = None,
            task_id: int = 1,
            force_resume: bool = False):
    """
    Run job directly in console window.

    :param Job job: Job with tasks to run
    :param str task_name: which task should run, default: The first listed task
    :param int task_id: which task_id should be used, default: 1
    :param bool force_resume: Force resume of job in error state
    """
    assert isinstance(job, Job), "%s is not a Job" % job

    if not job._sis_setup():
        logging.info('Job directory missing, set it up: %s' % job)
        setup_job_directory(job)

    task = None
    if task_name is None:
        task = job._sis_tasks()[0]
    else:
        for t in job._sis_tasks():
            if t._start == task_name:
                task = t
                break
        assert task is not None, \
            "'%s' is not a valid task name (Valid names: %s)" % (task_name, [t._start for t in job._sis_tasks()])

    try:
        call = task.get_worker_call(task_id)
        if force_resume:
            call.append('--force_resume')
        import subprocess
        process = subprocess.Popen(call)
        try:
            process.wait()
        except KeyboardInterrupt as e:
            process.terminate()
            process.wait()
            raise e
    except Exception as e:
        import traceback
        logging.error("Job failed %s" % e)
        traceback.print_exc()
Пример #4
0
def setup_job_directory(job: Job):
    """ Setup the work directory of the given job.

    :param Job|Path job: Job which needs work directory
    """

    original_input = job
    if is_path(job):
        job = job.creator
    from sisyphus.job import Job
    if isinstance(job, Job):
        if job._sis_runnable():
            job._sis_setup_directory()
            logging.info('Done setting up: %s' % job)
        else:
            missing_inputs = '\n'.join(
                str(i) for i in job._sis_inputs if not i.available())
            logging.error('Job has still missing inputs: %s' % missing_inputs)
    else:
        logging.error('Not a job: %s' % original_input)
        print(type(job))