Пример #1
0
    def run_task(task_id):
        task = ts.get_task_by_id(task_id)
        if not task or task.state != "generated":
            return False

        t_change = task.make_runnable()
        a_task = ats.get_task_by_id(task.assemble_task_id)
        success = True
        if a_task.is_completed():
            t_change.update(task.completed(task.assemble_task_id))

        else:
            a_task_change = a_task.make_runnable()
            success = ats.update_task(a_task_change, task.assemble_task_id)

        if success and task.learn_task_id:
            l_task = lts.get_task_by_id(task.learn_task_id)
            if l_task.is_completed():
                t_change = task.completed(task.learn_task_id)

            else:
                l_task_change = l_task.make_runnable()
                success = lts.update_task(l_task_change, task.learn_task_id)

        if success:
            success = ts.update_task(t_change, task_id)

        return success
Пример #2
0
    def load_task(task_id):
        task = ts.get_task_by_id(task_id)
        exp = es.get_experiment(task.experiment_id)
        result = task.__dict__
        result['experiment_name'] = exp.name
        a_task = ats.get_task_by_id(task.assemble_task_id)
        result['assemble_config'] = a_task.assemble_config
        if not a_task.is_completed():
            result['assigned_to'] = a_task.assigned_to

        else:
            result['result'] = a_task.result_file_path

        result['progress'] = a_task.progress or 0.0
        result['task_in_progress'] = 'assembling'
        if task.learn_task_id:
            l_task = lts.get_task_by_id(task.learn_task_id)
            result['assemble_config'] = l_task.assemble_config
            result['learn_config'] = l_task.learn_config
            result['progress'] = round(
                (((a_task.progress or 0.0) +
                  (l_task.progress or 0.0)) / 2.0) * 100, 2)
            result[
                'task_in_progress'] = 'learning' if l_task.state == "running" or a_task.state == "completed" else 'assembling'
            result['result'] = l_task.result
            if l_task.assigned_to and not l_task.is_completed():
                result['assigned_to'] = l_task.assigned_to

        return result
Пример #3
0
    def load_task_from_db(task_id):
        task = ts.get_task_by_id(task_id)
        result = {
            "id": task_id,
            "state": task.state,
            "order_in_exp": task.order_in_exp,
            "status_info": "Task Completed" if task.state == "completed" else "Run task",
        }
        assemble_task = ats.get_task_by_id(task.assemble_task_id)
        if task.learn_task_id:
            learn_task = lts.get_task_by_id(task.learn_task_id)
            result["learn_config"] = learn_task.learn_config
            if task.state == "runnable" or task.state == "running":
                if learn_task.state == "runnable":
                    result["status_info"] = "Learning is waiting for worker"

                elif learn_task.state == "running":
                    result["status_info"] = "Learning is in progress"

        result["assemble_config"] = assemble_task.assemble_config
        if task.state == "runnable" or task.state == "running":
            if assemble_task.state == "runnable":
                result["status_info"] = "Assembling is waiting for worker"

            elif assemble_task.state == "running":
                result["status_info"] = "Assembling is in progress"

        return result
Пример #4
0
    def load_worker(worker_id):
        worker = ws.get_worker(worker_id)
        result = worker.__dict__
        if worker.current_task_id:
            task = ats.get_task_by_id(worker.current_task_id)
            if task:
                result['is_assembling'] = True

            else:
                task = lts.get_task_by_id(worker.current_task_id)

            parents = ts.get_assembling_parents(
                worker.current_task_id) if result.get(
                    'is_assembling', False) else ts.get_learning_parents(
                        worker.current_task_id)
            running_task_ids = [
                t_id for t_id, t in parents if t.state == "running"
            ]
            result['task_ids'] = running_task_ids
            if len(running_task_ids) > 1:
                result['is_working_on_multiple_tasks'] = True

            result['log'] = task.log

        return result
def get_unassigned_task():
    tasks = db.get_unassigned_learn_tasks()
    tasks = [(t_id, t) for t_id, t in tasks
             if t.state == "runnable" and (ats.get_task_by_id(
                 t.assemble_task_id) or AssembleTask('empty')).result_file_path
             ]
    if len(tasks):
        return tasks[0]

    return None, None
def remove_task(worker_id, worker, log):
    try:
        task = ats.get_task_by_id(
            worker.current_task_id) or lts.get_task_by_id(
                worker.current_task_id)
        task_changes = task.revoke_assign_from(worker_id)
        success = ats.update_task(task_changes,
                                  worker.current_task_id) or lts.update_task(
                                      task_changes, worker.current_task_id)
        worker_changes = worker.error(log)
        success = success and update_worker(worker_changes, worker_id)
        return success

    except Exception as e:
        return None
def learn_task_json(learn_task):
    a_conf = learn_task.assemble_config
    csv = ats.get_task_by_id(learn_task.assemble_task_id).result_file_path
    if not csv:
        return None

    l_conf = learn_task.learn_config
    preprocess = []
    if 'preprocess_features' in l_conf['shared_parameters'] and l_conf[
            'shared_parameters']['preprocess_features'] != "none":
        preprocess.append(
            ["features", l_conf['shared_parameters']['preprocess_features']])

    if 'preprocess_labels' in l_conf['shared_parameters'] and l_conf[
            'shared_parameters']['preprocess_labels'] != "none":
        preprocess.append(
            ["labels", l_conf['shared_parameters']['preprocess_labels']])

    return {
        "type": "learning",
        "parameters": {
            "shared": {
                "csv": csv,
                "label": a_conf['shared_parameters']['label'],
                **{
                    k: v
                    for k, v in l_conf['shared_parameters'].items() if k not in [
                        'preprocess_features', 'preprocess_labels'
                    ]
                }
            },
            "strategy": [[
                l_conf['strategy_id'],
                parameters_to_string(l_conf['strategy_parameters'])
            ]],
            "preprocess":
            preprocess,
        }
    }
Пример #8
0
def _remove_task(worker_id, worker):
    try:
        a_task = ats.get_task_by_id(worker.current_task_id)
        if not a_task:
            l_task = lts.get_task_by_id(worker.current_task_id)

        task_changes = (a_task or l_task).revoke_assign_from(worker_id)
        success = ats.update_task(
            task_changes,
            worker.current_task_id) if a_task else lts.update_task(
                task_changes, worker.current_task_id)
        parents = ts.get_assembling_parents(
            worker.current_task_id) if a_task else ts.get_learning_parents(
                worker.current_task_id)
        for pt_id, parent in parents:
            t_change = parent.make_runnable(True)
            success = ts.update_task(t_change, pt_id) and success
            exp = es.get_experiment(parent.experiment_id)
            scheduler.add_experiment(parent.experiment_id, exp.priority)

        return success

    except Exception as e:
        return None