作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用示例中的标准过程(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/
使用示例中的标准过程(for 循环),我们发现机器上使用了大量内存。 IE。似乎队列中的所有消息都已加载到内存中并得到确认。这种做法是here .我假设队列是一个生成器。 import rabbitp
我似乎无法运行代码 - 我一直在使用 Pika,并热衷于尝试这个线程安全且可能更简洁的版本。 import rabbitpy with rabbitpy.Connection('amqp://gues
我是一名优秀的程序员,十分优秀!