Ограничение длины очереди с помощью PyZMQ

Я хочу ограничить объем памяти, потребляемой моими очередями сообщений ZeroMQ в приложении Python. Я знаю, что установка максимальной отметки ограничит количество, которое будет поставлено в очередь на стороне отправителя, но есть ли способ контролировать, сколько будет стоять в очереди на стороне получателя? Для привязки Python ZeroMQ, похоже, установлено неограниченное значение.

Мой тестовый сценарий: у меня есть два терминала Python, которые я использую для тестирования. Один - получатель:

Python 2.5.1 (r251:54863, Aug 25 2008, 20:50:04) 
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> import zmq
>>> context = zmq.Context()
>>> socket = context.socket(zmq.PULL)
>>> socket.setsockopt(zmq.RCVBUF, 256)
>>> socket.bind("tcp://127.0.0.1:12345")

Другой - отправитель:

Python 2.5.1 (r251:54863, Aug 25 2008, 20:50:04) 
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> import zmq
>>> context=zmq.Context()
>>> socket = context.socket(zmq.PUSH)
>>> socket.setsockopt(zmq.SNDBUF, 2048)
>>> socket.setsockopt(zmq.HWM, 1)
>>> socket.connect("tcp://127.0.0.1:12345")
>>> num = 0
>>> while True:
...  print num
...  socket.send(str(num))
...  num = num + 1
... 

Я запускаю socket.recv () на стороне получателя пару раз, чтобы убедиться, что очередь работает, но кроме этого, пусть два терминала просто сидят там. Кажется, что цикл отправки никогда не блокируется, а запрос на получение, похоже, имеет растущий объем памяти.

5
задан Benyamin Jafari 16 September 2018 в 12:27
поделиться