在Python中用redis实现一个push/pull(或队列)
Implement a push/pull (or queue) with redis in Python
我目前正在从事一个项目,其中有很多可以并行处理的任务。我正在使用redis来存储数据,我也想用它来处理我的作业队列。
起初,我使用了 Redis 文档中描述的 PubSub pattern。这里的问题是它将每条消息发送给每个工人,我希望每个工人一条消息。目前,我通过为每条消息添加状态(在数据库中)来规避问题,但这显然不是最佳选择。
有没有办法用合适的模式轻松替换此 pubsub 模式?
不确定这是使用 Redis 实现队列的最有效方法,但这绝对是一种简单的方法!
import time
from redis import Redis
REDIS_CLIENT = Redis()
def push(*values):
REDIS_CLIENT.rpush('QUEUE', *values)
def pull():
while True:
msg = REDIS_CLIENT.rpop('QUEUE')
if msg is None:
time.sleep(0.1)
continue
work(msg)
我目前正在从事一个项目,其中有很多可以并行处理的任务。我正在使用redis来存储数据,我也想用它来处理我的作业队列。
起初,我使用了 Redis 文档中描述的 PubSub pattern。这里的问题是它将每条消息发送给每个工人,我希望每个工人一条消息。目前,我通过为每条消息添加状态(在数据库中)来规避问题,但这显然不是最佳选择。
有没有办法用合适的模式轻松替换此 pubsub 模式?
不确定这是使用 Redis 实现队列的最有效方法,但这绝对是一种简单的方法!
import time
from redis import Redis
REDIS_CLIENT = Redis()
def push(*values):
REDIS_CLIENT.rpush('QUEUE', *values)
def pull():
while True:
msg = REDIS_CLIENT.rpop('QUEUE')
if msg is None:
time.sleep(0.1)
continue
work(msg)