Kon*_*kiy 5 python zeromq 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")
Run Code Online (Sandbox Code Playgroud)
另一个是发件人:
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
...
Run Code Online (Sandbox Code Playgroud)
我socket.recv()在接收器端运行几次以确保队列正常工作,但除此之外,让两个终端只是坐在那里.发送循环似乎永远不会阻塞,接收提示似乎有不断增长的内存占用.
与ZeroMQ的文档相矛盾的是,高水位线PUSH需要在侧面和侧面都设置PULL。一旦我改变了PULL,它的效果就更好了。新PULL代码是:
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.setsockopt(zmq.HWM, 1)
>>> socket.bind("tcp://127.0.0.1:12345")
Run Code Online (Sandbox Code Playgroud)