Python pika从线程消耗忽略键盘中断

Python pika从线程消耗忽略键盘中断,python,multithreading,python-2.7,rabbitmq,pika,Python,Multithreading,Python 2.7,Rabbitmq,Pika,我正在尝试使用github的pika 0.10.0运行以下测试: 导入日志 导入系统 进口鼠兔 导入线程 logging.basicConfig(stream=sys.stdout,level=logging.DEBUG) URL='1〕amqp://guest:guest@127.0.0.1:5672/%2F?套接字超时=0.25' 类BaseConsumer(threading.Thread): def运行(自): 自连接=无 self.\u通道=无 self.connect() self.

我正在尝试使用github的pika 0.10.0运行以下测试:

导入日志
导入系统
进口鼠兔
导入线程
logging.basicConfig(stream=sys.stdout,level=logging.DEBUG)
URL='1〕amqp://guest:guest@127.0.0.1:5672/%2F?套接字超时=0.25'
类BaseConsumer(threading.Thread):
def运行(自):
自连接=无
self.\u通道=无
self.connect()
self.open_channel()
自我消费
def连接(自):
parameters=pika.URLParameters(URL)
self.\u connection=pika.BlockingConnection(参数)
def open_通道(自):
self.\u channel=self.\u connection.channel()
self.\u channel.exchange\u declare(exchange='exc1',exchange\u type='topic',passive=False,
持久=假,自动删除=假,内部=假,参数=无)
self.\u channel.queue\u声明(queue='test',被动=False,持久=False,
exclusive=False,auto_delete=False,arguments=None)
self.\u channel.queue\u bind(
'test'、'exc1',routing_key='rk',arguments=None)
def消耗(自我):
self.\u channel.basic\u consume(self.on\u消息“test”)
尝试:
self.\u channel.start\u consuming()
除键盘中断外:
logging.info(“立即停止消费!”)
self.\u channel.stop\u consuming()
self.\u connection.close()
def on_消息(自身、通道、方法_帧、标题_帧、正文):
打印方法\u帧。交付\u标签
印刷体
channel.basic\u ack(交付标记=方法\u frame.delivery\u标记)
c1=基本消费者()
c1.setDaemon(False)
c1.开始()
脚本正在连接到我的MQ,并且显然能够使用来自MQ的消息。问题是我无法停止线程。在我的键盘上按CTRL-C只能使“^C”出现在控制台中,而不会中断使用

问题是,当pika在线程内运行时,如何使其停止消费?我想指出的是,我遵循在使用者线程中创建连接的指导原则

如果在使用c1.start()启动线程之后,我还执行了一个无限while循环,并从那里记录了一些内容,那么按下CTRL-C将结束while循环,但是使用者线程仍然会忽略任何额外的CTRL-C

附带问题:是否可以通过一些外部信号(如线程状态或其他)停止线程内部的消耗?我看不出我怎么能干扰开始消费

问题:。。。然后按CTRL-C键结束while循环

def stop()
添加到
BaseConsumer

捕捉
键盘中断
并调用
stop()

阅读

try: 
    BaseConsumer.run() 
except KeyboardInterrupt: 
    BaseConsumer.stop()