使用redis服务器实现队列(欢迎留言讨论)
2016-03-25 10:52
741 查看
以下环境都是windows7 python3.5环境,模拟洗衣、烘干的队列过程
《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《
先使用单独的进程来模拟:
1、启动redis服务器
2、命令行运行dry客户端:
3、新命令行运行wash客户端:
其内容如下:
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
下面使用多线程来模拟这个队列:
1、启动redis服务器
2、命令行运行dry客户端:
其内容如下(不懂可以留言):
3、新命令行运行wash客户端:
其内容同上
4、两个客户端会打印出信息如下:
wash客户端:
dry客户端:
至此,利用redis服务器模拟多线程队列完成
《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《
先使用单独的进程来模拟:
1、启动redis服务器
2、命令行运行dry客户端:
<span style="font-size:14px;">python redis_dryer.py &</span>其内容如下(不懂可以留言):
<span style="font-size:14px;">import redis conn = redis.Redis() print('Dryer is starting') while True: msg = conn.blpop('dishes') if not msg: break val = msg[1].decode('utf-8') if val == 'quit': break print('Dried', val) print('Dishes are dried') </span>
3、新命令行运行wash客户端:
<span style="font-size:14px;">python redis_washer.py</span>
其内容如下:
<span style="font-size:14px;">import redis conn = redis.Redis() print('Washer is starting') dishes = ['salad', 'bread', 'entree', 'dessert'] for dish in dishes: msg = dish.encode('utf-8') conn.rpush('dishes', msg) print('Washed', dish) conn.rpush('dishes', 'quit') print('Washer is done') </span>4、两个客户端会交替打印出信息,模拟成功(不贴图了,麻烦)
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
下面使用多线程来模拟这个队列:
1、启动redis服务器
2、命令行运行dry客户端:
<span style="font-size:14px;">python redis_dryer2.py &</span>
其内容如下(不懂可以留言):
<span style="font-size:14px;">def dryer(): import redis import os import time conn = redis.Redis() pid = os.getpid() timeout = 20 print('Dryer process %s is starting' % pid) while True: msg = conn.blpop('dishes', timeout) if not msg: break val = msg[1].decode('utf-8') if val == 'quit': break print('%s: dried %s' % (pid, val)) time.sleep(0.1) print('Dryer process %s is done' % pid) import multiprocessing DRYERS=3 if __name__ == '__main__': for num in range(DRYERS): p = multiprocessing.Process(target=dryer) p.start()</span>
3、新命令行运行wash客户端:
<span style="font-size:14px;">python redis_washer.py</span>
其内容同上
4、两个客户端会打印出信息如下:
wash客户端:
dry客户端:
至此,利用redis服务器模拟多线程队列完成
相关文章推荐
- 关于redis集群方案
- redis.clients.jedis.exceptions.JedisConnectionException: no reachable node in cluster
- redis事务、管道及消息通知探究
- redis 笔记
- redis 消息订阅和发布
- Redis基本命令
- redis中的事务
- redis hash结构及命令详解
- Redis for Windows
- 利用tomcat redis 实现session共享
- 2.2-Redis主从配置
- 2.1-Redis配置讲解(下)
- 2.0-Redis配置讲解(上)
- 1.9-Redis持久化
- 1.7-Redis介绍和安装
- centos安装redis+三种启动方式
- redis总结
- redis cluster管理工具redis-trib.rb详解
- redis3.0 cluster功能介绍
- redis 使用