:return True - success; False - extra_tick failure; runner object - the runner who tick failure

def _run_once(runner_list, extra_tick, use_poll):
    """
    :return True - success; False - extra_tick failure; runner object - the runner who tick failure
    """
    if len(runner_list) > 0:
        asyncore.loop(0, use_poll, None, 1)
        for runner in runner_list:
            if not runner.tick():
                return runner
    if extra_tick is not None:
        code = extra_tick()
        if code is False:
            return False
    return True