def update(self, objs, delay=None): if not objs: return self._add_objs(objs, self.update_pool) if self.update_receiving: return self.update_receiving = True delay = delay if delay is not None else self.delay def _update(): if delay: time.sleep(delay) updating_pool = self.update_pool self.update_pool = {} self.update_receiving = False self._update(updating_pool) if delay: async_exe(_update) else: _update()
def sync_init(app_name): """app初始化 :param app_name: app名称 """ app_module = import_module(app_name) if hasattr(app_module, 'sync_init'): # 同步初始化 app_module.sync_init() if hasattr(app_module, 'async_init'): # 异步初始化 async_exe(app_module.async_init) if hasattr(app_module, 'async_global_init'): # 异步全局初始化(进程无关的初始化) async_exe_once(app_module.async_global_init) # 初始化资源模块 resource_name = '{app_name}.resources'.format( app_name=app_name, ) try: import_module(resource_name) except ImportError as e: _handle_import_error(e, resource_name) # 初始化验证 validator_name = '{app_name}.validators'.format( app_name=app_name, ) try: import_module(validator_name) except ImportError as e: _handle_import_error(e, validator_name)
def listen_message(key, callback, context_key=None, timeout=None, block=False, pool_name=None, **kwargs): """ 监听消息 :param key: 消息识别key :param callback: 回调函数 :param context_key: 消息上下文识别key :param timeout: 超时关闭监听 :param block: 是否阻塞 :param pool_name: 配置池名称 :return: 无 """ message_listener = get_message_listener(key, callback, context_key, **kwargs) config = get_config(settings.NAMEKO_CONFIG, name=pool_name) service_runner = ServiceRunner(config) service_runner.add_service(message_listener) service_runner.start() if timeout: def stop(): time.sleep(timeout) service_runner.stop() if block: stop() else: async_exe(stop) return service_runner
def send(self, data): # 更新发送的消息为最新 self.data = data if self.checking: return async_exe(self._send)
def receive_listen(self, data): """ rpc代理监听 :param key: 调用key :return: 连接id """ sock = self.check_connection(data) if not sock: return False key = data.get('key') async_exe(self._listen, (key, sock._connection_id)) return True
def run(self, over_callback=None): if self.running: return errors = [] if not self.tasks: if over_callback: over_callback(errors) return self.running = True pool_size = self.pool_size if self.pool_size else len(self.tasks) for i in range(pool_size): async_exe(self._one_queue, (errors, over_callback))
def receive_send(self, data): """ rpc代理发送数据 :param data: 数据 :return: 无 """ content = data.get('data') if content is None: return sock = self.check_connection(data) if not sock: return key = data.get('key') async_exe(self._listen, (key, sock._connection_id)) sock.sendall(content)