如何在多处理系统上处理Pika消费者

时间:2017-11-06 11:32:07

标签: python concurrency rabbitmq pika

我有一个多进程和多线程系统,它与Pika一起使用以消耗一些队列。 当系统在具有多线程消费者的单进程上工作时,它可以正常工作,但是当它与多进程(生成的进程)一起工作时,有时一些消费者从队列中获取重复数据。

如何解决当消费者从队列中获取数据时,其他消费者永远不会再从该队列中获取该数据的问题?

问题的示例地图:

Single-Process, Multi-Thread:
    Sample queue data: 1-2-3-4-5
        consumed by thread-1: 5
        consumed by thread-2: 4
        ...

Multi-Process, Multi-Thread:
    Sample queue data: 1-2-3-4-5
        consumed by process-1, thread-1: 5   << ISSUE
        consumed by process-2, thread-1: 4
        consumed by process-3, thread-3: 5   << ISSUE
        ...

注意:每个线程都有自己的连接。

1 个答案:

答案 0 :(得分:0)

RabbitMQ团队监控this mailing list,有时只回答StackOverflow上的问题。

在创建其他流程或线程之前,您是否创建了Pika客户端?如the docs中所述,Pika客户端既不是线程安全的,也不是多进程安全的。

如果没有提供工作示例,我无法进一步诊断这种特殊行为。