Python——redis发布者/订阅者笔记
来源:互联网 发布:东翌编程 编辑:程序博客网 时间:2024/06/13 09:52
先介绍一下redis的pub/sub功能:
Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能。基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者。
通俗来讲,就是说我sub端(订阅者)一直监听着,一旦pub端(发布者)发布了消息,那么我就接收过来,举个小栗子,先是发布者:
#coding:utf-8import timeimport redis,MySQLdbdb = MySQLdb.connect(***************)db.set_character_set('utf8')cursor = db.cursor()vid_list = [i[0] for i in cursor.fetchmany(cursor.execute('**********'))]db.close()rc = redis.StrictRedis(host='***',port='***',db=3,password='********')ls_len = len(vid_list)index = ls_len/2vid_foo_list = vid_list[0:index]#这是把list列表分成2部分给bar和foovid_bar_list = vid_list[index:]for vid in vid_foo_list: rc.publish("foo", vid) #发布消息到foofor vid in vid_bar_list: rc.publish("bar", vid)
接着我们来看看订阅者:
#coding:utf-8import timeimport redisrc = redis.StrictRedis(host='****',port='******',db=3,password='******')ps = rc.pubsub()ps.subscribe(['foo','bar']) #从foo,bar 订阅消息for item in ps.listen():#监听状态:有消息发布了就拿过来 if item['type'] == 'message': print item['channel'] print item['data']
关于数据结构,也就是item,是类似于:{'pattern': None, 'type': 'message', 'channel': 'bar', 'data': '26418491'}这样的,所以可以通过channel来判断这个消息是属于哪一个队列里的。(运行程序的时候,先运行订阅者,在运行发布者程序)
那么这有什么用呢——做爬虫之类的简单分布式:我们可以把我们要采集的url的list列表放在发布者程序里面,爬虫采集程序放在订阅者里,这样,就能实现了一个简单的分布式爬虫
阅读全文
16 1
- Python——redis发布者/订阅者笔记
- Step into Redis- 07 - 发布者-订阅者
- 简单的发布者/订阅者(Python)
- Redis 学习笔记十 发布者订阅者模式与生产者消费者模式
- 发布者订阅者模式
- 发布者&订阅者模型
- Redis: Jedis 源代码剖析2- 发布者/订阅者模式剖析
- 发布者订阅者模式(一)
- 简单的订阅者/发布者模式
- 从发布者和订阅者来看事件
- javascript 观察者模式 (订阅者与发布者)
- (十一)ROS发布者和订阅者
- 机器人操作系统ROS Indigo 入门学习(13)——验证简单的发布者和订阅者
- 机器人操作系统ROS Indigo 入门学习(13)——验证简单的发布者和订阅者
- 机器人操作系统ROS Indigo 入门学习(13)——验证简单的发布者和订阅者
- 机器人操作系统ROS Indigo 入门学习(13)——验证简单的发布者和订阅者
- 《Pro Spring》学习笔记之Spring+ActiveMQ实现Topic通信(发布者/订阅者)
- 一个订阅发布者模式
- HDU-2017 多校训练赛8-1008-Hybrid Crystals
- css属性background-attachment,box-reflect,text-stroke,mask,margin-collapse
- 欢迎使用CSDN-markdown编辑器
- java并发
- 运行net start mysql 报“服务名无效”解决办法
- Python——redis发布者/订阅者笔记
- C++ 中头文件重复定义的问题
- Spring中简单使用jedis
- Python 中的 classmethod 和 staticmethod 有什么具体用途?
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- C和C++的内存操作小贴士(一):const char*的内存释放问题
- Linux下使用Socket实现http文件下载
- 完美解决thinkphp3的mysql连接问题
- PHP安装OCI8扩展