Ищете скомпилированную библиотеку Python AMQP
Мы создаем высокопроизводительный клиент AMQP, использующий Qpid в качестве посредника, и мы не приближаемся к пропускной способности, о которой сообщалось в других местах. (Мы получаем скорость менее 250 мсг / с, в то время как эта запись в блоге увеличивается в 4 раза.) Я боюсь, что низкая производительность может быть связана с тем, что клиентские библиотеки Qpid Python находятся на чистом Python. Кто-нибудь знает о скомпилированной библиотеке Python AMQP, которая совместима с Qpid 0.7?
Изменить 2011-07-01: Хотя я принял ответ zeekay, для Qpid они недавно выпустили привязки SWIG для своей библиотеки. Я сделал патчи, которые делают (почти) замену их чистым клиентским библиотекам Python. После изменения конфигурации, которое дало нам до 1000 мсг / с, использование версии SWIG дало нам около 7000 мсг / с. Надеемся, что другие пользователи Qpid найдут привязки (и мои патчи) полезными.
3 ответа
Это очень медленно. Что-то определенно не так, и другая библиотека, вероятно, не будет иметь большого значения. Простой тест с использованием rabbitmq и превосходной библиотеки kombu (у которой абсолютно прекрасный API!):
>>> def bench(num):
...: start = time.time()
...: for i in range(num):
...: producer.publish({"name": 'test', 'data': 1231231})
...: elapsed = time.time() - start
...: print "Sent %s messages in %.2f seconds : %.1f msg/sec" % (num, elapsed, num / elapsed)
...:
...:
>>> bench(100)
Sent 100 messages in 0.01 seconds : 7790.6 msg/sec
>>> bench(1000)
Sent 1000 messages in 0.13 seconds : 7743.4 msg/sec
>>> bench(10000)
Sent 10000 messages in 1.35 seconds : 7424.3 msg/sec
Кажется, я могу отправлять и получать сообщения со скоростью около 7 Кбит / с. Kombu может использовать как py-amqp, так и pika для клиентов synch/asynch. Что касается клиентов, вы также можете посмотреть txAMQP для витых. Или даже zeromq.
Теперь вы можете использовать python-qpid, который реализован на Python.
Я использовал kombu с pyamqplib и смог получить не менее 4000 сообщений в секунду от экземпляра RabbitMQ, работающего на том же хосте, с постоянными сообщениями.
Сначала я посмотрю на проблемы с задержкой в сети между вами и вашим брокером.
У меня есть скрипт сборки Python по адресу https://github.com/wavetossed/pybuild который также собирает ряд клиентских библиотек AMQP, включая библиотеку RabbitMQ C. Вы можете попробовать это.
Вы также можете попробовать экземпляр RabbitMQ на своем брокере. Если вы получаете те же проблемы со скоростью, скорее всего, это будет сеть. Если нет, то это может быть ошибка QPID.