Различная производительность (python3 против tnet) Rabbitmq с использованием одной и той же библиотеки API - PullRequest
2 голосов
/ 16 февраля 2020

Я пытался выяснить, как лучше всего использовать библиотеку rabbitmq python (pika / aiopika), хотя я заметил, что получаю совсем другие результаты, когда я делаю то же самое, используя do tnet library (RabbitMQ.Client).

python:

import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
exchange_name = "test-load"
channel.exchange_declare(exchange_name, exchange_type="topic", durable=True)
msg = 'WhySoSLow?'
while True:
    channel.basic_publish(exchange=exchange_name,routing_key="random", body=msg)

Это дало мне результаты 11K msgs / s при 100% загрузке процессора

И для do tnet:

using RabbitMQ.Client;

var factory = new ConnectionFactory() { HostName = "localhost" };
using(var connection = factory.CreateConnection())
using(var channel = connection.CreateModel())
{
    channel.ExchangeDeclare(exchange: "test-load", durable: true, type: "topic");

    var routingKey = "random";
    var message = "WhySoSLow?";

    var body = Encoding.UTF8.GetBytes(message);
    while(true) 
    {
        channel.BasicPublish(   exchange: "test-load", 
                                routingKey: routingKey,
                                basicProperties: null,
                                body: body);

    }
}

Этот код выдает результаты 100K мсг / с при использовании ЦП 30%

Что я делаю не так?

1 Ответ

1 голос
/ 16 февраля 2020

Производительность отличается в зависимости от языка. C ++ был бы еще быстрее.

C# имеет больше оптимизации как во время компиляции, так и во время выполнения, в то время как Pyton должен постоянно иметь дело с упаковкой и распаковкой.

Может быть, вы можете получить некоторую оптимизацию идеи одного из комментария выше но с библиотекой, которую вы используете, я сомневаюсь.

...