![](/img/trans.png)
[英]AMQPConnectionError using Pika and RabbitMQ with Asyncore - why?
[英]rabbitmq using threads with 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
t.join()
等待线程完成。 在start()
循环的第一次迭代中,您启动了第一个线程,然后等待其结束,但是它永远不会成功,因为channel.start_consuming()
是一个无限循环,等待传入的消息。
Pika不是线程安全的。 从皮卡常见问题解答 :
皮卡线安全吗?
Pika在代码中没有任何线程概念。 如果要通过线程使用Pika,请确保在该线程中创建的每个线程都有一个Pika连接。 跨线程共享一个Pika连接是不安全的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.