怎么用redis+python做消息队列
这篇文章主要讲解了“怎么用redis+python做消息队列”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用redis+python做消息队列”吧!
创新互联是专业的蓟州网站建设公司,蓟州接单;提供网站建设、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行蓟州网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
一、使用redis的List类型结合lpush 和 brpop 来实现
简介
首先redis的List 相当于一个队列,可以实现先进先出的规则
采用brpop 是因为当队列中没有的时候会进行阻塞,直到队列中有可弹出元素或者等待超时
模拟问题:
访问太多,服务器处理速度太慢,如果每隔用户等待,服务器反馈的话,时间太长,http连接超时,出现服务器错误。
模拟实现过程:
有一个客户端不断的往队列里放东西(数据),采用多线程,模拟大量用户访问的情况
有一个服务器不断的从队列中取出打印,并设置每次打印时间睡2秒
redis的List结构介绍
key [value, value] key 代表List的名字, [value, ...] 是值
客户client.py
import random import threading import redis import config lock = threading.Lock() lock.acquire() lock.release() pool = redis.ConnectionPool(host=config.HOST, port=config.PORT, decode_responses=True, password=config.PASSWORD) r = redis.Redis(connection_pool=pool) # 客户往redis 中放数据 def fun1(redisObj): value = random.randint(0, 100) # 往ccc列表中存放 print("开始发送数据:", value) redisObj.lpush("print",str(value)) for i in range(100): threading.Thread(target=fun1, args=(r,)).start()
服务器server.py
import redis import time import config pool = redis.ConnectionPool(host=config.HOST, port=config.PORT, decode_responses=True, password=config.PASSWORD) r = redis.Redis(connection_pool=pool) # 服务端不断的取 while True: value = r.brpop("print") time.sleep(2) print(value)
问题回顾
我们之前说存在阻塞太久断开连接的问题,解决下
方式: 将连接作为一个函数,进行错误捕捉,发生问题的时候重新连接。
import redis import time import config def get_redis(): pool = redis.ConnectionPool(host=config.HOST, port=config.PORT, decode_responses=True, password=config.PASSWORD) r = redis.Redis(connection_pool=pool) return r # 服务端不断的取 r = get_redis() while True: try: value = r.brpop("print") time.sleep(2) print(value) except Exception as e: print("等待超时重连") r = get_redis()
感谢各位的阅读,以上就是“怎么用redis+python做消息队列”的内容了,经过本文的学习后,相信大家对怎么用redis+python做消息队列这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
文章标题:怎么用redis+python做消息队列
标题来源:http://pwwzsj.com/article/jpcojc.html