ZeroMQ: Как расставить приоритеты сокетов в методе .poll()?Python

Программы на Python
Ответить
Anonymous
 ZeroMQ: Как расставить приоритеты сокетов в методе .poll()?

Сообщение Anonymous »

Представьте себе следующий код:

Код: Выделить всё

import threading, zmq, time

context = zmq.Context()
receivers = []
poller = zmq.Poller()

def thread_fn(number: int):
sender = context.socket(zmq.PUSH)
sender.connect("tcp://localhost:%d" % (6666 + number))
for i in range(10):
sender.send_string("message from thread %d" % number)

for i in range(3):
new_receiver = context.socket(zmq.PULL)
new_receiver.bind("tcp://*:%d" % (6666 + i))
poller.register(new_receiver, zmq.POLLIN)
receivers.append(new_receiver)
threading.Thread(target=lambda: thread_fn(i), daemon=True).start()

while True:
try:
socks = dict(poller.poll())
except KeyboardInterrupt:
break

for i in range(3):
if receivers[i] in socks:
print("%d: process message %s" % (i, receivers[i].recv_string()))
time.sleep(0.2)  # 'process' the data
Потоки без перерыва отправляют некоторые сообщения, которые в случайном порядке поступают в соответствующие PULL-сокеты, где они «обрабатываются».

[/b] обычно вы подключаетесь к одному PULL-сокету, но в этом примере предполагается предоставить более одного принимающего сокета.

Вывод:

Код: Выделить всё

0: process message message from thread 0
1: process message message from thread 1
0: process message message from thread 0
1: process message message from thread 1
2: process message message from thread 2
0: process message message from thread 0
1: process message message from thread 1
2: process message message from thread 2
....
Теперь я хочу читать из всех сокетов, как в примере, но я бы хотел отдать приоритет одному сокету.

То есть: я хочу, чтобы результат был:

Код: Выделить всё

0: process message message from thread 0   

Подробнее здесь: [url]https://stackoverflow.com/questions/38633359/zeromq-how-to-prioritise-sockets-in-a-poll-method[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»