Python使用者通过pika中使用的RabbitMQ能否在并发接收到的消息之间具有竞争条件?

问题描述

假设我们在Python中具有以下简单的RabbitMQ回调逻辑:

import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost',5672,'/',pika.PlainCredentials("user","password")))
channel = connection.channel()

msg_count = 0

def callback(ch,method,properties,body):
    global msg_count
    msg_count += 1
    print("Received %i messages" % msg_count)

channel.basic_consume(queue="my_queue",on_message_callback=callback,auto_ack=True)

如果生产者实际上同时发送两个消息,由于竞争情况,“接收到的1条消息”是否有可能被打印两次?

我只是不确定这些回调如何运行-它们是否同时运行?在线程中?其他方式?

解决方法

如果生产者实际上同时发送两个消息,是否 由于出现“接收到的1条消息”,可能会打印两次 比赛条件?

不。 Pika在内部运行一个I / O循环,并在事件就绪时按顺序处理事件。

FWIW,我现在是Pika的主要维护者。


注意: RabbitMQ团队监视rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...