python的新手。 我正在尝试为RabbitMQ客户端创建多个使用者。 我正在使用PIKA并尝试进行多处理。 似乎正在连接但无法维持循环。 你能帮忙吗? 代码的一部分还应注意通过回调的writer选项。
它应该开始循环并且应该总是消耗
import multiprocessing
import time
import pika
# this is the writer part
def callback(ch, method, properties, body):
print (" [x] %r received %r" % (multiprocessing.current_process(), body,))
time.sleep(body.count('.'))
# print " [x] Done"
ch.basic_ack(delivery_tag=method.delivery_tag)
def consume():
credentials = pika.PlainCredentials(userid, password)
parameters = pika.ConnectionParameters(url, port, '/', credentials)
connection = pika.BlockingConnection(
parameters=parameters)
channel = connection.channel()
channel.queue_declare(queue='queuename', durable=True)
channel.basic_consume('queuename',callback)
print (' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
userid = "user"
password = "pwd"
url = "localhost"
port = 5672
if __name__ == "__main__":
workers = 5
pool = multiprocessing.Pool(processes=workers)
for i in range(0, workers):
pool.apply_async(consume)
#Stay alive
try:
while True:
答案 0 :(得分:1)
您没有在子流程中执行任何异常处理,所以我猜是正在抛出您不期望的异常。 This code在我的环境中可以使用Pika 1.1.0和Python 3.7.3正常工作。
在检查body.count()
中的异常之前,将抛出TypeError
,因为在这种情况下body
不是str
。
请注意,根据these docs,我正在使用正确的方法来等待子流程。
注意: RabbitMQ团队监视rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。