gpt4 book ai didi

python - 使用 PyZMQ 限制队列长度

转载 作者:太空狗 更新时间:2023-10-30 01:23:44 25 4
gpt4 key购买 nike

我想限制我的 ZeroMQ 消息队列在 Python 应用程序中消耗的内存量。我知道设置高水位线会限制在发送方排队的数量,但是有没有办法控制在接收方排队的数量? Python ZeroMQ 绑定(bind)似乎已将其设置为无限制。

我的测试场景:我有两个用于测试的 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() 以确保队列正常工作,但除此之外,让两个终端就在那里。发送循环似乎从不阻塞,接收提示似乎占用越来越多的内存。

最佳答案

与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")

关于python - 使用 PyZMQ 限制队列长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com