LINUX.ORG.RU

Расшариная очередь redis

 ,


0

2

Всем привет. Собственно сабж:

#client.py

import redis
from pickle import dumps

r = redis.StrictRedis(host='localhost', port=6379)

r.publish('my-test-channel', dumps('some data1'))
r.publish('my-test-channel', dumps('some data2'))
r.publish('my-test-channel', dumps('some data3'))
r.publish('my-test-channel', dumps('some data4'))
r.publish('my-test-channel', dumps('some data5'))
и
# server.py

import redis
from pickle import loads

r = redis.StrictRedis(host='localhost', port=6379)
p = r.pubsub()
p.subscribe('my-test-channel')

try:
    for message in p.listen():
        if message['type'] == 'message':
            print loads(message['data']), type(loads(message['data']))
except KeyboardInterrupt:
    p.close()

Запускаю два сервера. После этого запускаю клиента, в итоге, оба сервера получают одни и те же данные, а мне надо, чтобы данные распределялись между ними. Подскажите, как исправить это поведение...

По-моему так нельзя. Я когда-то делал подобное с помощью ZMQ.

Запускаешь один воркер, который слушает редис, в нём же с помощью push сокета отправляешь полученное сообщение. Запускаешь кучку воркеров с pull сокетами, которые подключаются к push сокету. ??? PROFIT.

Во всяком случае подожди, может появятся знающие люди и предложат вариант по лучше.

Kilte ★★★★★
()
Ответ на: комментарий от zz

А чем список поможет?разве он удаляет из очереди значение?

energyclab
() автор топика
Ответ на: комментарий от Kilte

rq уже смотрел, у меня в проекте celery уже заюзан...хотелось бы не через воркер это делать, так как там целый проект будет запускаться...

energyclab
() автор топика

Подскажите, как исправить это поведение...

Внимательно прочитать про pub/sub.

bj
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.