在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)