我有两个队列,比如q1和q2,它们分别对应于e1和e2,并交换绑定密钥b1和b2。我想并行运行消费者函数,比如c1和c2,它们分别监听q1和q2。我尝试了以下方法:
def c1():
connection = pika.BlockingConnection(pika.ConnectionParameters(host=constants.rmqHostIp))
channel = connection.channel()
channel.exchange_declare(exchange='e1', durable='true',
type='topic')
result = channel.queue_declare(durable='false', queue='q1')
queue_name = result.method.queue
binding_key = "b1"
channel.queue_bind(exchange='e1',
queue=queue_name,
routing_key=binding_key)
channel.basic_consume(callback,queue=queue_name,no_ack=False)
channel.start_consuming()
def c2():
connection = pika.BlockingConnection(pika.ConnectionParameters(host=constants.rmqHostIp))
channel = connection.channel()
channel.exchange_declare(exchange='e2', durable='true',
type='topic')
result = channel.queue_declare(durable='false', queue='q2')
queue_name = result.method.queue
binding_key = "b2"
channel.queue_bind(exchange=e1,
queue=queue_name,
routing_key=binding_key)
channel.basic_consume(callback,queue=queue_name,no_ack=False)
channel.start_consuming()
if __name__ == '__main__':
c1()
c2()
但是,它只监听了c1函数和c2函数,没有执行。我怎么才能同时运行这两个函数呢?提前感谢。
编辑:我在2个不同的模块(文件)中有方法c1和c1
2条答案
按热度按时间byqmnocz1#
为了同时运行这两个函数,一些多线程方法需要按顺序运行。请查看here中的一些python示例。
这是用Process类修改的代码。它也可以使用线程或从操作系统显式运行它。
pprl5pva2#
您可以使用一个连接和一个通道接收来自多个队列的消息。
pika
python模块内置了测试代码,可使用一个阻塞连接和一个通道进行测试(仅供参考,此test code is from 2015)。下面是pika python模块的测试代码,它测试如何使用一个阻塞连接和一个通道从多个队列中获取消息:https://github.com/pika/pika/blob/1.3.0/tests/acceptance/blocking_adapter_test.py#L2072-L2172。
由于我自己的顽固原因,我也写了类似的代码,使用一个阻塞连接和一个通道和两个队列,并验证了这也工作。