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()