RabbitMQ - 同时处理多个任务

时间:2015-10-11 14:10:21

标签: python queue rabbitmq task

我有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还没有发送),则不会为第二个任务调用回调。它等待当前任务完成以启动下一个任务。

1 个答案:

答案 0 :(得分:0)

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

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

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

the RMQ tutorials for python中的示例将此视为从多个消费者那里获得并行处理的一种方式