def stop(self): """ 停止,必须保证异步的任务已经全部完成 """ self.stoped = True lets = list(self._set_lets.keys()) joinall(lets) log.warning('[store](%s) stop complete!', self.db_name) return True
def mydaemon(app): def gevent_set_signal_handlers(signal_handler_map): signals = {} for (signal_number, handler) in signal_handler_map.items(): #gevent.signal have not params, but, signal handler want params(signal_number, stack_frame) if callable(handler): signals[signal_number] = signal_handler( signal_number, handler, signal_number, None) app.signals = signals #use gevent signal to register terminate daemon.set_signal_handlers = gevent_set_signal_handlers myrunner = MyDaemonRunner(app) app.daemon_runner = myrunner #daemon.close_file_descriptor_if_open may be crack, don't use it myrunner.daemon_context.files_preserve = list(range(0, 1025)) try: myrunner.do_action() except DaemonRunnerStopFailureError as err: log.exception('do_action') if not myrunner.pidfile.is_locked(): print('pidfile no found, app is running?') except SystemExit as err: log.warning('app SystemExit:%s', err) raise except: log.exception('do_action')
def getProcesserInfo(self): if self.rpc is None: log.warning('***getProcesserInfo error: player(%s).handler(%s) ?? handler(%s) rpc_is_None', id(self.player) if self.player else None, id(self.player._handler) if self.player else None, id(self)) return return self.rpc.getProcesserInfo()
def close_socket(self): from gevent import socket if getattr(self, 'socket', None) is not None: try: log.warning('Http10WSGIHandler %s socket close', self.client_address) self.socket._sock.close() self.socket.close() except socket.error: pass
def call(self, fname, data, noresult=False, timeout=None): if self.rpc is None: log.warning('***send(fname=%s, data=%s) error: player(%s).handler(%s) ?? handler(%s) rpc_is_None', fname, data, id(self.player) if self.player else None, id(self.player._handler) if self.player else None, id(self)) return if self.DEBUG: log.debug('send-- fname %s, data %s', fname, data) self.rpc.call(fname, data, noresult=noresult, timeout=timeout)
def _on_close(self, sub_proxy): """ 子进程断线 """ if sub_proxy not in self.sub_proxys: raise ValueError('[MultiCell](%s) on_close call by other app', self.name) pid = sub_proxy._sub_pid addr = sub_proxy._sub_addr log.warning('close app:pid=%s, app_name=%s, addr=%s', pid, self.name, addr) self.sub_proxys.remove(sub_proxy) self.mgr.proc_mgr.kill_process(pid)
def _on_close(self, sub_proxy): """ 子进程断线 """ if sub_proxy != self.sub_proxy: raise ValueError('[SingleCell](%s) on_close call by other app', self.name) pid = self.sub_proxy._sub_pid addr = self.sub_proxy._sub_addr log.warning('close app:pid=%s, app_name=%s, addr=%s', pid, self.name, addr) self.mgr.proc_mgr.kill_process(pid) self.app = None
def aes_encrypt(data): global _aes_encrypt if _aes_encrypt is None: from corelib.aes import new_aes_encrypt key = config.GM_AESKEY if key is not None: _aes_encrypt = new_aes_encrypt(key) else: log.warning('*****client AES key no found!') return data return _aes_encrypt(data)
def gw_close(self, rpc_gw): """ 网关断开 """ svc = rpc_gw.get_service() close_gwid = getattr(svc, self.GWID) log.warning('网关(%s - %s)断开', rpc_gw.get_addr(), close_gwid) self.rpc_gws.pop(close_gwid) for key in self.processers.values(): gwid, pid = key if gwid != close_gwid: continue p = self.del_process(gwid, pid) if p: spawn(p.close, client=False)
def set(self, key, value, timeout=None): """ timeout:过期时间(单位秒),如果为0,不过期 """ if timeout is None or timeout < 0: timeout = self.default_timeout if timeout > 0: timeout = time.time() + abs(timeout) self._times[key] = timeout self._caches[key] = (value, timeout) if len(self._caches) > self.size and \ self._gc_time + self.gc_time < time.time(): log.warning('TimeMemCache缓存(%s-%s)不足,开始清理缓存', self.name, len(self._caches)) spawn(self.gc) #sleep(0.01) return value
def stop(self): if self.stoped: return self.stoped = True log.warning('管理进程开始退出') try: self.web_svr.stop() log.warning('管理进程:stop_game') self._stop_game() log.warning('管理进程:stop_frame') self.frame.stop() except: log.log_except() finally: self._waiter.set()
def main(): # admin_path = join(os.environ['ROOT_PATH'], 'serveradmin') log.warning("admin_path:::%s", config.admin_path) sys.path.insert(0, config.admin_path) app = Application() common.daemon(app)
def reload_modules(self, module_name_list): log.warning('********app(%s) reload_modules*******', self.name) from corelib import xreload for module_name in module_name_list: xreload.reload_module(module_name) log.warning('********app(%s) reload_modules end!!!!*******', self.name)
def terminate(self, signal_number, stack_frame): """ 收到关闭的信号,在主线程上抛出异常 """ log.warning("Terminating on signal %r", signal_number) exception = SystemExit("Terminating on signal %(signal_number)r" % vars()) self._main_let.throw(exception)