社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Redis

redis“模式:可靠队列”的代码实现

Mittenchops • 4 年前 • 400 次点击  

优秀的redis文档列出了 Reliable queue pattern 作为rpoplPush函数的一个好的候选/示例。

我理解“可靠队列”是具有如下交付模式的 Amazon SQS FIFO exactly once pattern .

具体来说,有一些n个进程进入队列,还有一些m个工作线程从队列工作。这实际上是一个什么样的实现?

我敢说:

使feeder进程填充工作队列。

# feeder1

import redis
import datetime
import time

r = redis.Redis(host='localhost', port=6379, db=0)
while True:
  now = datetime.datetime.now()
  value_to_work_on = "f1:{}".format(now.second) 
  r.push('workqueue', value_to_work_on)
  time.sleep(1)

再做一个

# f2
import redis
import datetime
import time

r = redis.Redis(host='localhost', port=6379, db=0)
while True:
  now = datetime.datetime.now()
  value_to_work_on = "f2:{}".format(now.second) 
  r.push('workqueue', value_to_work_on)
  time.sleep(1)

现在让工人们

# worker1
import redis

r = redis.Redis(host='localhost', port=6379, db=0)

def do_work(x):
  print(x)
  return True

while True:
  todo = r.rpoplpush("workqueue" "donequeue")
  if do_work(todo):
    print("success")
  else:
    r.push("workqueue", todo)

# worker2 is exactly the same, just running elsewhere.

我的问题是:

  1. 这是文档中通常的意思吗?如果没有,你能提供一个解决方案作为答案吗?
  2. 这似乎还不完整,也不太可靠。例如,对于错误队列和完整队列,是否应该有替代列表?每一个可能的错误状态对应一个?如果你的redis在处理过程中掉了怎么办?
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/41000
 
400 次点击  
文章 [ 1 ]  |  最新文章 4 年前