封装的Redis队列

MyRedisQueue.py

#!usr/bin/env python2.7
# -*- coding: utf-8 -*- import redis class RedisQueue(object):
def __init__(self, name, namespace='queue', **redis_kwargs):
# redis的默认参数为:host='localhost', port=6379, db=0, 其中db为定义redis database的数量
# r = redis.Redis(host='localhost', port=6379, decode_responses=True)
# 加上decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型
# host是redis主机,需要redis服务端和客户端都启动 redis默认端口是6379
self.__db = redis.Redis(**redis_kwargs)
self.key = '%s:%s' % (namespace, name) def qsize(self):
return self.__db.llen(self.key) # 返回队列里面list内元素的数量 def put(self, item, timeout=None):
self.__db.rpush(self.key, item) # 添加新元素到队列最右方
if isinstance(timeout, int):
self.__db.expire(self.key, timeout) def get_wait(self, timeout=None):
# 返回队列第一个元素,如果为空则等待至有元素被加入队列(超时时间阈值为timeout,如果为None则一直等待)
item = self.__db.blpop(self.key, timeout=timeout)
# if item:
# item = item[1] # 返回值为一个tuple
return item def get_nowait(self):
# 直接返回队列第一个元素,如果队列为空返回的是None
item = self.__db.lpop(self.key)
return item def get_all(self):
items = []
while True:
result = self.get_nowait()
if result:
items.append(eval(result))
else:
break
return items

接收端

#!usr/bin/env python2.7
# -*- coding: utf-8 -*- from MyRedisQueue import RedisQueue queue_name = "q1"
retCode = {"status": {"code": 0, "msg": "success"}}
redis_queue = RedisQueue(queue_name)
ret = redis_queue.get_wait(30) # 阻塞等待30s,直到队列中有元素进来
if ret is None:
retCode["status"]["code"] = 2
retCode["status"]["msg"] = "超时未响应"

发送端

#!usr/bin/env python2.7
# -*- coding: utf-8 -*- from MyRedisQueue import RedisQueue queue_name = "q1"
redis_queue = RedisQueue(queue_name)
redis_queue.put("all done")

最新文章

  1. .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)
  2. HTML 表单和输入<textarea><label><fieldset><legend><select><optgroup><option><button>
  3. 写给java开发的运维笔记
  4. SpringMVC,3种不同的URL路由配置方法(这根本不是一个小问题)
  5. phonegap上传以及下载图片
  6. next_permutation()函数 和 prev_permutation() 按字典序求全排列
  7. Apache中的权限设置
  8. OCP-1Z0-042-V12.39-51题
  9. make -jN
  10. php如何上传txt文件,并且读取txt文件
  11. mysql数据库左联的使用(一张数据库表关联到另外一张数据库表)
  12. Java 制作证书的工具keytool用法总结
  13. web h5常用代码总结
  14. 第一册:lesson twenty seven。
  15. SQL注入介绍
  16. Flask框架(1)-程序基本结构
  17. Linux基础命令---检查密码文件pwck
  18. elasticsearch 常用命令(一)
  19. 【.netcore基础】MVC制器Controller依赖注入
  20. Pig是轻类型的

热门文章

  1. python学习记录(四)
  2. LeetCode 218. The Skyline Problem 天际线问题(C++/Java)
  3. 牛客练习赛52 C 烹饪(容斥+扩展欧几里得)
  4. Python:自动化上传OSS
  5. Classmethod and Staticmethod - Python 类方法 和 静态方法
  6. python3 ansible api 命令和playbook
  7. ansible----sudo
  8. pinpoint 修改hbase表TTL值
  9. Mybatis随记(一)update动态SQL
  10. [未完成]ECRound 80