def show(id): ''' show [id] show task [id] details. ''' (id, ), err_msg = check_input(((id, int), )) if err_msg: return 1, err_msg task = task_manage.get_task(id) if task is None: return 1, f'[error]: can not found id {id} in task queue.' table = pt.PrettyTable(['name', 'value']) table.border = False table.align = 'l' table.add_row(['task id:', task.id]) table.add_row(['task pid:', task.pid]) table.add_row(['priority:', task.priority]) table.add_row(['use gpu:', task.gpu]) table.add_row(['run times:', task.run_times]) table.add_row(['status:', task.status]) table.add_row(['out file:', task.out_path]) table.add_row(['pwd:', task.pwd]) table.add_row(['cmds:', " ".join(task.cmds)]) return 0, str(table)
def ls(*, all=False): ''' ls ls GPU task queue status Options: --all default ls only show <80 commands, use `all` to show all commands. --sort show by different sort type. can use: ['id', 'priority', 'show', 'run'] ''' (all, ), err_msg = check_input(((all, bool), )) if err_msg: return 1, err_msg tasks = task_manage.tasks table = pt.PrettyTable( ['[ID]', 'num', 'status', 'run_times', 'pwd', 'cmds']) table.border = False for i, task in enumerate(tasks): status = str(task.status ) + f'(GPU:{task.gpu})' if task.gpu is not None else str( task.status) if not all: table.add_row([ task.id, i, status, task.run_times, task.pwd + '#', " ".join(task.cmds)[:80] ]) else: table.add_row([ task.id, i, status, task.run_times, task.pwd + '#', " ".join(task.cmds) ]) return 0, str(table)
def rm(id): ''' rm [id] remove task [id] from manage, if task is running, kill it. ''' (id, ), err_msg = check_input(((id, int), )) if err_msg: return 1, err_msg if task_manage.rm_task(id): return 0, f'[info]: del task {id}' else: return 1, f'[error]: can not found {id} in task queue.'
def kill(id): ''' kill [id] kill task [id] ''' (id, ), err_msg = check_input(((id, int), )) if err_msg: return 1, err_msg task = task_manage.get_task(id) if task is None: return 1, f'[error]: can not found id {id} in task queue.' return task.kill()
def mv(id, index=0, *args, **kwargs): ''' mv [id] [index(default=0)] move [id] to [index] ''' (id, index), err_msg = check_input(((id, int), (index, int)), args, kwargs) if err_msg: return 1, err_msg if index > len(task_manage): return 2, f'[error]: index {index} is bigger than task queue length({len(task_manage)})' if task_manage.mv_task(id, index): return 0, f'[info]: move {id} to the first' else: return 1, f'[error]: can not found task {id}'
def start(id=None): ''' start [iddefalut=None] Force start task(s). Information: gpulimit start running `check_and_start`, and auto start new task. gpulimit start 1 Force start task [id]. ''' if id is None: return task_manage.scheduling.user_start_scheduling(task_manage) (id, ), err_msg = check_input(((id, int), ), ) if err_msg: return 1, err_msg return task_manage.scheduling.user_start_scheduling(task_manage, id)
def debug(id): ''' debug [id] if task [id] is `CMD_ERROR`, use this show error traceback. Example: debug 1 show task 1 error traceback. ''' (id, ), err_msg = check_input(((id, int), ), ) if err_msg: return 1, err_msg task = task_manage.get_task(id) if task is None: return 1, f'[error]: can not found task[{id}]' return 0, str(task.debug_msg)
def get_output_filename(id): ''' log [id] show [id] output. Example: gpulimit log 1 show task(id=1) output. gpulimit log main show manage background log info. ''' if id == 'main': return 0, task_manage.log_file (id, ), err_msg = check_input(((id, int), ), ) if err_msg: return 1, err_msg task = task_manage.get_task(id) if task is None: return 1, 'Error' return 0, os.path.abspath(task.out_path)