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
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
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
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, } }
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