我正在使用带有RabbitMQ的amqp模块。我需要创建一个非阻塞的消费者。为此,我使用了线程模块。
有一个问题:我必须在app退出时停止线程。以下是代码的一部分:
c.start_consuming(message_callback)
while not self._stop.isSet():
if self._stop.isSet():
print("thread will be stopped")
else:
print("thread will NOT BE STOPPED")
c.channel.wait()
问题是,c.channel.wait()有时会阻塞,有时不依赖于队列中是否有一些消息正在侦听(我做了一些实验但是还不够)
如果我可以使用c.channel.wait()函数的超时参数,我可以通过设置超时来实现该目标,例如0.1秒。就我搜索源代码而言,没有超时选项。
主要问题:如何使用amqp模块创建非阻塞使用者?
子问题1:如何修补amqp代码,使其开始使用超时值?
后备解决方案:我可以考虑使用多处理模块,以便随时终止该进程。