pika.BlockingConnection
メッセージごとにいくつかのタスクを実行するコンシューマーで使用しています。また、すべてのタスクを完全に実行した後にコンシューマーが適切に終了するように、シグナル処理も追加しました。
メッセージが処理され、シグナルが受信されている間"signal received"
、関数から取得するだけですが、コードは終了しません。そこで、コールバック関数の最後に受信したシグナルもチェックすることにしました。問題は、このコードにはさらに多くの関数があるため、信号を何回チェックするかです。無理をせずにシグナルを処理するより良い方法はありますか?
import signal
import sys
import pika
from time import sleep
received_signal = False
all_over = False
def signal_handler(signal, frame):
global received_signal
print "signal received"
received_signal = True
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
mq_connection = pika.BlockingConnection(pika.ConnectionParameters(my_mq_server, virtual_host='test'))
mq_channel = mq_connection.channel()
def callback(ch, method, properties, body):
if received_signal:
print "Exiting, as a kill signal is already received"
exit(0)
print body
sleep(50)
mq_channel.basic_ack(delivery_tag=method.delivery_tag)
print "Message consumption complete"
if received_signal:
print "Exiting, as a kill signal is already received"
exit(0)
try:
print ' [*] Waiting for messages. To exit press CTRL+C'
mq_channel.basic_consume(callback, queue='test')
mq_channel.start_consuming()
except Exception:
mq_channel.close()
exit()
これは私の最初の質問です。詳細が必要な場合はお知らせください。