【问题标题】:RabbitMQ - Handle multiple tasks simultaneouslyRabbitMQ - 同时处理多个任务
【发布时间】:2015-10-11 14:10:20
【问题描述】:

我有 N 个工作人员使用我的 RabbitMQ 任务。但我希望他们能够同时处理多个任务。

我读到了 prefetch_count 参数,它可以让我这样做,但它不起作用。

这是我的 Python 代码,使用 Pika 库:

import pika
import time

connection = pika.BlockingConnection(pika.ConnectionParameters(
    host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='task_queue', durable=True)
print(' [*] Waiting for messages. To exit press CTRL+C')


def callback(ch, method, properties, body):
    print(" [x] Received %r" % (body,))
    time.sleep(body.count(b'.'))
    print(" [x] Done")
    ch.basic_ack(delivery_tag=method.delivery_tag)

channel.basic_qos(prefetch_count=2) # Here I should be able to handle 2 tasks in the same time
channel.basic_consume(callback,
                      queue='task_queue')

channel.start_consuming()

不幸的是,如果当前正在处理一个任务(因此,basic_ack 尚未发送),则不会为第二个任务调用回调。它等待当前任务完成后开始下一个任务。

【问题讨论】:

  • 你是如何运行 N 个工人的。我有相同的要求,我想运行 10 名工人。该怎么做?

标签: python queue rabbitmq task


【解决方案1】:

我认为您的代码在单个线程上同步运行。

将预取设置为 1,然后在您的计算机上创建 2 个消费者进程实例。这将同时运行两个工人。

或者,您可以执行多线程...但我个人不喜欢多线程。我发现管理一个进程的更多实例比管理线程更容易。

the RMQ tutorials for python 中的示例表明这是从多个消费者那里获得并行处理的一种方式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2018-11-05
    • 2018-04-23
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多