zoukankan      html  css  js  c++  java
  • python redis 实现简单的消息订阅

    python + redis 实现简单的消息订阅

    订阅端

    import redis
    from functools import wraps
    
    
    class Subscribe:
        def __init__(self, channel: str, **kwargs):
            self.coon = redis.StrictRedis(**kwargs)
            self.channel = channel
            self.registerd = list()
            self.course = self.coon.pubsub()
            self.course.subscribe(self.channel)
    
        def register(self, func):
            self.registerd.append(func)
    
            @wraps(func)
            def wrapper(*args, **kwargs):
                return func(*args, **kwargs)
    
            return wrapper
    
        def listen(self):
            messages = self.course.listen()
            for message in messages:
                self.dispatch(message)
    
        def dispatch(self, message):
            for handler in self.registerd:
                handler(message)
    
    
    DEFAULT_CHANNEL = 'channle'
    
    subscribe = Subscribe(DEFAULT_CHANNEL)
    
    
    @subscribe.register
    def print_args(message):
        print(message)
    
    
    subscribe.listen()
    
    
    • 先创建一个订阅对象,利用register装饰器来注册监听到的消息的处理函数
    • 最后执行listen方法来监听,当当前对象监听到了消息,会自动转交给所有的处理函数

    发布端

    import redis
    
    coon = redis.StrictRedis()
    
    coon.publish('channel', '发布的消息对象')
    
    •   发布端只要向同一个数据库的里执行使用相同的key执行`publish`命令即可
      
    • 可以利用pickle模块来对python对象进行序列化, 传入redis。如果是线程锁对象,可以使用dill模块序列化。
  • 相关阅读:
    保持简单----纪念丹尼斯•里奇(Dennis Ritchie)
    转:有关retina和HiDPI那点事
    Powershell 学习
    Windows与Linux共享文件夹互相访问
    你知道C语言为什么会有“_”(下划线)吗?
    百度公共DNS
    AXIS2的一些认识
    待整理
    java复习汇总之面试篇
    落网歌曲图片下载
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/12505671.html
Copyright © 2011-2022 走看看