Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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.'
Exemple #4
0
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()
Exemple #5
0
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}'
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)