def reload_all_timers(timer_pool):
    """ 更新所有的固定定时脚本

    :param timer_pool:
    :return:
    """
    for k, v in TIMER_CONFIG.iteritems():
        try:
            timer_task = TimerTask(k, v)
            if timer_task.can_add(CONFIG_TYPE, DEFAULT_GLOBAL_SERVER):
                timer_pool.add(timer_task)
                print_log(
                    k, datetime.datetime.fromtimestamp(timer_task.next_time))
        except:
            trackback(msg='timer, add %s ERROR: ' % str(k))
def reload_all_config(timer_pool, force_reload=False):
    """ 更新所有配置相关的定时脚本

    :param timer_pool:
    :param force_reload: 是否强行加载
    :return:
    """
    for config in TIMER_GAME_CONFIG:
        try:
            if len(config) == 2:
                reload_config(timer_pool,
                              config[0],
                              config[1],
                              force_reload=force_reload)
            elif len(config) == 3:
                reload_mul_config(timer_pool,
                                  config[0],
                                  config[1],
                                  config[2],
                                  force_reload=force_reload)
        except:
            trackback(msg='timer, add %s ERROR: ' % str(config[0]))
    def loop(self, ):
        """# start: docstring
        args:
            :    ---    arg
        returns:
            0    ---
        """
        while 1:
            gevent.sleep(1)
            now = time.time()
            self.lock.acquire()

            if self.config_time % 60 == 0:
                # from logics.share import  debug_sync_change_time
                # 注意, 正式环境禁止启动此函数
                if settings.DEBUG:
                    debug_sync_change_time(self)

                if self.is_config_out():
                    game_config.load_all()
                    reload_all_config(self)

            pool_copy = copy.copy(self.pool)
            del_list = []
            for k, task_obj in pool_copy.iteritems():
                if now >= int(task_obj.get_next_time()):
                    try:
                        if task_obj.is_global() == 1:
                            # gevent.joinall([gevent.Greenlet.spawn(task_obj.get_func())], raise_error=True)
                            gevent.joinall(
                                [gevent.Greenlet.spawn(task_obj.get_func())])
                        elif task_obj.is_global() == 2:
                            world_ids = list(
                                set([
                                    value['world_id'] for value in
                                    game_config.server_pk_world.itervalues()
                                ]))
                            for world_id in world_ids:
                                print_log(
                                    'world func: ', task_obj.get_func(),
                                    datetime.datetime.fromtimestamp(
                                        task_obj.next_time))
                                # gevent.joinall([gevent.Greenlet.spawn(task_obj.get_func(), world_id)], raise_error=True)
                                gevent.joinall([
                                    gevent.Greenlet.spawn(
                                        task_obj.get_func(), world_id)
                                ])
                        else:
                            for server_name, server_cfg in settings.SERVERS.iteritems(
                            ):
                                if server_name == 'master': continue
                                # if server_cfg['config_type'] != CONFIG_TYPE: continue
                                if settings.get_config_type(
                                        server_name) != CONFIG_TYPE:
                                    continue
                                print_log(
                                    'func: ', task_obj.get_func(),
                                    datetime.datetime.fromtimestamp(
                                        task_obj.next_time))
                                # gevent.joinall([gevent.Greenlet.spawn(task_obj.get_func(), server_name)], raise_error=True)
                                gevent.joinall([
                                    gevent.Greenlet.spawn(
                                        task_obj.get_func(), server_name)
                                ])
                        timer_model.last_update_timestamp[
                            task_obj.get_key()] = now
                        if task_obj.is_repeat():
                            task_obj.parser()
                            timer_model.next_update_timestamp[
                                task_obj.get_key()] = int(
                                    task_obj.get_next_time())
                        else:
                            del_list.append(k)
                        timer_model.save()
                        print_log('timer, run %s, is_repeat: %s' %
                                  (k, str(task_obj.is_repeat())))
                    except:
                        trackback(msg='timer, timer %s ERROR: ' % str(k))
            for k in del_list:
                del self.pool[k]
            self.config_time += 1
            self.lock.release()