LINUX.ORG.RU

PyZMQ many-to-many queue

 , , ,


0

2

Можно ли на PyZMQ реализовать очередь многие-ко-многим?

Чтобы несколько тредов пихали в очередь сообщения, и много тредов так же забирали из очереди (кто первый, тот и забирает)?

Всё, разобрался.

Попробую по такой схеме:

тред --PUSH\             /PUSH--> worker
тред --PUSH---> broker ---PUSH--> worker
тред --PUSH/             \PUSH--> worker

Mirage1_ ()
Ответ на: комментарий от Norgat

Потому что на него забил не только главный автор, но и большинство примкнувших тоже. В результате многое из того, что есть внутри, просто сломано. Архитектурно ZeroMQ изначально - весьма странный зверь, которого испугался даже сам главный автор (отчего и сбежал). Да и полезность его сомнительна. Это некий швейцарский нож, претендующий на простоту использования, но пользоваться при этом им сложно из-за подводных камней и непофикшенных багов. Большинство задач неплохо решаются без ZMQ.

asaw ★★★★★ ()
Последнее исправление: asaw (всего исправлений: 1)

Всё замечательно.

Запустил пару воркеров, они получают от промежуточного брокера сообщения поочерёдно.

Код брокера:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import zmq # передача сигнала с uuid
import socket

# consumer.py
# http://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/patterns/pushpull.html

ctx = zmq.Context()
ctx.setsockopt(socket.SO_REUSEPORT,1)
ctx.setsockopt(zmq.LINGER,0)

sock1 = ctx.socket(zmq.PULL)
sock2 = ctx.socket(zmq.PUSH)

hostZMQ = "127.0.0.1"
portZMQ1 = "10001"
addrZMQ1 = "tcp://%s:%s" % (hostZMQ,portZMQ1)
portZMQ2 = "10002"
addrZMQ2 = "tcp://%s:%s" % (hostZMQ,portZMQ2)

print sock1.bind(addrZMQ1) # открыть порт
print sock2.bind(addrZMQ2) # открыть порт

while True:
        d = sock1.recv_json()
        print d["id"]
        # немедленная отправка
        try: sock2.send_json(d,zmq.NOBLOCK)
        except Exception,e:
                print repr(e)

Mirage1_ ()
Ответ на: комментарий от Mirage1_

Узлы на разных машинах в сети.

Про это у тебя ничего не было.

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

Не, у меня уже всё получилось в пару сотен строк на PyZMQ+Redis, сохранение в файловый каталог при невозможности записи в Redis, и поднятие оттуда записей.

Всё отлично работает, очередь ожидает и пишет/читает.

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