rabbitmq 使用带有 pika 的线程

lea*_*tes 2 python multithreading rabbitmq pika

我正在尝试使用rabbitmq 获得一个基本的队列系统,但是当我尝试使用线程时,它似乎只运行了 1 个线程。

我的代码:

import pika
import threading

rabbit_url = "amqp://user:pass!@127.0.0.1:5672/%2f"

def start(max_threads):
    for i in xrange(max_threads):
        t = threading.Thread(target=run)
        t.start()
        t.join()

def run():
    connection = pika.BlockingConnection(pika.URLParameters(rabbit_url))
    channel = connection.channel()
    channel.basic_consume(callback,
                          queue='docketq',
                          no_ack=True)

    channel.start_consuming()

def callback(ch, method, properties, body):
    do_work(body)

def do_work(body):
    print body
Run Code Online (Sandbox Code Playgroud)

小智 5

Pika 不是线程安全的。来自皮卡常见问题解答

Pika 线程安全吗?

Pika 的代码中没有任何线程的概念。如果您想通过线程使用 Pika,请确保每个线程都有一个在该线程中创建的 Pika 连接。跨线程共享一个 Pika 连接是不安全的。


dub*_*bek 5

t.join()等待线程完成。在循环的第一次迭代中,start()您启动第一个线程然后等待它完成,但它永远不会因为channel.start_consuming()等待传入消息的无限循环。