例に見られるような標準的な手順(forループ)を使用して、マシンに使用されているメモリが大量にあります。私。キュー内のすべてのメッセージがメモリにロードされ、確認応答されたように見えます。このアプローチはhereです。キューはジェネレータであると仮定しました。rabbitpyメッセージループは大量のメモリを消費するようです
import rabbitpy
with rabbitpy.Connection('amqp://guest:[email protected]: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'
は、今、私たちは.get()
経由で一度に一つのメッセージを使用して、メッセージgetterに行けば、より少ないメモリ空腹のように見えます。しかし、私のコード(無限ループを使用して)は、待ち行列にメッセージがないときにコンシューマーが実行されるようにするために - ウェブコントロールパネルでうまく動作しますが、コンシューマーは表示されません。消費者として - これを修正するにはどうすればよいのですか?ウェブパネルで消費者を検出するようにしますか?
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"
私はライブラリを使用していません。単にソースコードを読み、この結論に達しました。私はテストし、それがあなたのニーズに合っていることを確認します。 –