:param auto_stop when tick error occur, stop all runners, except:
        if error was from a runner tick and the runner has set 'only_stop_self_when_tick_error' to True,
        then only this runner stop

def run_once(runner_list=None, extra_tick=Sleep(0.001), use_poll=False, auto_stop=True):
    """
    :param auto_stop when tick error occur, stop all runners, except:
        if error was from a runner tick and the runner has set 'only_stop_self_when_tick_error' to True,
        then only this runner stop
    """
    if runner_list is None:
        runner_list = _runner_list

    code = _run_once(runner_list, extra_tick, use_poll)
    if code is True:  # no error
        return True
    elif code is False:  # extra tick error
        if auto_stop:
            for runner in list(runner_list):
                runner.stop()
        return False
    else:  # runner tick error
        if hasattr(code, 'only_stop_self_when_tick_error') and code.only_stop_self_when_tick_error:
            if auto_stop:
                code.stop()
            return True
        else:
            if auto_stop:
                for runner in list(runner_list):
                    runner.stop()
            return False
    return True