示例#1
0
    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()
示例#2
0
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)
示例#5
0
    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
示例#6
0
    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))
示例#7
0
    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)