Реализуйте push / pull (или очередь) с помощью redis в Python - PullRequest
0 голосов
/ 19 марта 2020

В настоящее время я работаю над проектом, в котором у меня много задач, которые можно распараллелить. Я использую Redis для хранения данных, и я также хотел бы использовать для обработки моей очереди заданий.

Сначала я использовал шаблон PubSub , описанный в Redis do c. Проблема здесь в том, что он отправляет каждое сообщение каждому работнику, где я хотел бы получить одно сообщение на каждого работника. На данный момент я обошел проблему, добавив статус (в БД) для каждого из сообщений, но это явно не оптимально.

Есть ли способ легко заменить этот шаблон pubsub подходящим шаблоном?

1 Ответ

0 голосов
/ 19 марта 2020

Не уверен, что это самый эффективный способ реализации очереди с помощью 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)
...