gpt4 book ai didi

python - rabbitpy 消息循环似乎消耗大量内存

转载 作者:行者123 更新时间:2023-11-28 18:25:01 25 4
gpt4 key购买 nike

使用示例中的标准过程(for 循环),我们发现机器上使用了大量内存。 IE。似乎队列中的所有消息都已加载到内存中并得到确认。这种做法是here .我假设队列是一个生成器。

import rabbitpy

with rabbitpy.Connection('amqp://guest:guest@localhost:5672/%2f') as conn:
with conn.channel() as channel:
queue = rabbitpy.Queue(channel, 'example')

# Exit on CTRL-C
try:
# Consume the message
for message in queue:
message.pprint(True)
message.ack()

except KeyboardInterrupt:
print 'Exited consumer'

现在如果我们转到消息getter ,通过 .get() 一次使用一条消息,它似乎不那么需要内存。然而,我的代码(使用无限循环)确保我们的消费者在队列中没有消息时运行 - 效果更好,但是在网络控制面板中,似乎没有消费者显示,即不知何故这个过程无法识别作为消费者 - 我们如何解决这个问题,以便在网络面板上检测到消费者?

queue_read = rabbitpy.Queue(channel, QUEUE_NAME)
while True:
body = queue_read.get() ## pop one at a time.
if body == None:
time.sleep(3)
continue
body.ack()
print " [x] OK - got a message"

最佳答案

看起来您需要的是在使用队列时设置 prefetch 属性。而不是:

for message in queue:
# handle message

改为尝试:

for message in queue.consume(prefetch=5): # or some other reasonable value
# handle message

Queue 类的 __iter__ 方法只是对 consume 方法本身的简单调用。

consume 方法将channel 设置为consuming 状态,而get 方法只是拉取一条消息离开 channel 并且不知道您是否打算在未来继续消费。这就是为什么您在 Web 面板中看不到您的进程的原因。

关于python - rabbitpy 消息循环似乎消耗大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41963821/

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