I'm using pyzmq
library with pub/sub pattern. I have some quick ZMQ publisher by .connect()
method and a slower ZMQ subscriber by .bind()
method.
Then after a few minutes, my subscriber gets old published data from the publisher (due to ZMQ buffer).
My Question:
Is there any approach to manage ZMQ queue buffer size? (set a limited buffer)
[NOTE]:
- I don't want to use ZMQ PUSH/PULL.
- I've read this post, but this approach clear buffer only: clear ZMQ buffer
- I tried with
high watermark
options too, but it didn't work:
socket.setsockopt(zmq.RCVHWM, 10) # not working
socket.setsockopt(zmq.SNDHWM, 10) # not working
Publisher:
import zmq
import time
port = "5556"
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:%s" % port)
socket.setsockopt(zmq.SNDHWM, 10) # not working
while True:
data = time.time()
print("%d" % data)
socket.send("%d" % data)
time.sleep(1)
Subscriber:
import zmq
import time
port = "5556"
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:%s" % port)
socket.setsockopt(zmq.SUBSCRIBE, '')
socket.setsockopt(zmq.RCVHWM, 10) # not working
while 1:
time.sleep(2) # A speed reducer like.
data = socket.recv()
print(data)
Even with these options, the queue size is more than 10 yet (with configured send/receive high watermark
).
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…