• neutron_lib: 一个进程内的发布与订阅


    这种发布订阅模式是基于内存的,当遇到执行完一个操作后需要触发一些其他操作的时候:
    1. 一种方法是直接以函数调用的方式,如果有多个需要触发的事情,就调用多个函数。
    2. 一种方法是用neutron_lib发布一个EventPayload事件,需要触发的操作事先订阅这个事件;不需要执行某个操作时,只需要取消订阅即可;可用于解耦代码结构。

    # encoding: utf-8
    '''
    neutron_lib示例
        - 一个进程内的订阅与发布
        - 允许订阅者有多个,会同时收到发布的消息,触发事件。
    '''
    from neutron_lib.callbacks import registry
    from neutron_lib.callbacks.events import PRECOMMIT, EventPayload
    
    
    def func(resource, event, trigger, payload):
        print(resource, event, trigger, payload.request_body)
        print(payload.metadata)
        print('call func1')
        print()
    
    
    def func2(resource, event, trigger, payload):
        print(resource, event, trigger, payload.request_body)
        print(payload.metadata)
        print('call func2')
    
    
    # 订阅者
    registry.subscribe(func, 'ashore', f'{PRECOMMIT}timeashore')
    registry.subscribe(func2, 'ashore', f'{PRECOMMIT}timeashore')
    
    
    # 发布
    event_payload = EventPayload(context=None, request_body={'name': 'zhangsan', 'age': 20}, metadata={'x': 10, 'y': 20})
    registry.publish('ashore', f'{PRECOMMIT}timeashore', None, event_payload)
    
    ashore precommit_timeashore None {'name': 'zhangsan', 'age': 20}
    {'x': 10, 'y': 20}
    call func1
    
    ashore precommit_timeashore None {'name': 'zhangsan', 'age': 20}
    {'x': 10, 'y': 20}
    call func2
    
  • 相关阅读:
    layui实现复选框全选,反选
    Lambda表达式详解
    母版页 VS shtml—ASP.NET细枝末节(3)
    无废话WCF入门教程一[什么是WCF]
    String.Format用法
    C#基础--之数据类型
    簡單SQL存儲過程實例
    SQL Server 存储过程
    存储过程详解
    sql语句分页多种方式ROW_NUMBER()OVER
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/14046680.html
Copyright © 2020-2023  润新知