Я работаю над приложением Python с фоновым потоком для использования сообщений из очереди RabbitMQ (тематический сценарий).
Я запускаю поток в событии on_click кнопки. Вот мой код, обратите внимание на "#self.receive_command()".
def on_click_start_call(self,widget):
t_msg = threading.Thread(target=self.receive_command)
t_msg.start()
t_msg.join(0)
#self.receive_command()
def receive_command(self):
syslog.syslog("ENTERED")
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
syslog.syslog("1")
channel = connection.channel()
syslog.syslog("2")
channel.exchange_declare(exchange='STORE_CMD', type='topic')
syslog.syslog("3")
result = channel.queue_declare(exclusive=True)
syslog.syslog("4")
queue_name = result.method.queue
syslog.syslog("5")
def callback_rabbit(ch,method,properties,body):
syslog.syslog("RICEVUTO MSG: RKEY:"+method.routing_key+" MSG: "+body+"\n")
syslog.syslog("6")
channel.queue_bind(exchange='STORE_CMD', queue=queue_name , routing_key='test.routing.key')
syslog.syslog("7")
channel.basic_consume(callback_rabbit,queue=queue_name,no_ack=True)
syslog.syslog("8")
channel.start_consuming()
Если я запущу этот код, я не увижу в системном журнале сообщение 1,2,3,5,6,7,8, но увижу только "ENTERED". Итак, код залочен на pika.BlokingConnection.
Если я запускаю один и тот же код (комментируя инструкцию потока и раскомментируя прямой вызов функции), все работает так, как ожидалось, и сообщение принимается правильно.
Есть какие-нибудь решения запустить потребителя в поток?
Заранее спасибо
Давиде