Комбу "медленный" с транспортом в памяти

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

from kombu.mixins import ConsumerMixin
from kombu import Connection, Exchange, Queue
from kombu.utils.debug import setup_logging

from time import sleep

import threading

media_exchange = Exchange('media', 'direct')
video_queue = Queue('video', exchange=media_exchange, routing_key='video')
queues = [video_queue]


class Worker(ConsumerMixin, threading.Thread):

    def __init__(self):
        self.connection = Connection('memory:///')

        super(Worker, self).__init__()

    def run(self):
        print("YUP I'M RUNNING")
        super(Worker, self).run()
        print("BUT I WASN'T BLOCKED :(")

    def get_consumers(self, Consumer, channel):
        return [
            Consumer(queues, callbacks=[self.on_message], accept=['json']),
        ]

    def on_message(self, body, message):
        print("RECEIVED MESSAGE: %r" % (body, ))
        message.ack()

if __name__ == '__main__':
    # setup root logger
    setup_logging(loglevel='INFO', loggers=[''])

    try:
        worker = Worker()
        worker.start()
    except KeyboardInterrupt:
        print('bye bye')

    while True:
        print("SEND MESSAGE")
        with Connection('memory:///') as conn:
            producer = conn.Producer(serializer='json')
            producer.publish({"foo": "bar"}, exchange=media_exchange,
                             routing_key='video', declare=queues)
        sleep(0.1)

Но если я использую транспорт в памяти, сообщения доставляются медленно, в то время как, если я использую, например, транспорт reddis, результат кажется нормальным. пример в памяти:

(rpc_video_player)[phas@mir src]$ python test_messages.py 
YUP I'M RUNNING
SEND MESSAGE
Connected to memory://localhost//
SEND MESSAGE
SEND MESSAGE
SEND MESSAGE
SEND MESSAGE
SEND MESSAGE
SEND MESSAGE
SEND MESSAGE
SEND MESSAGE
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}
RECEIVED MESSAGE: {'foo': 'bar'}
RECEIVED MESSAGE: {'foo': 'bar'}
RECEIVED MESSAGE: {'foo': 'bar'}
RECEIVED MESSAGE: {'foo': 'bar'}
RECEIVED MESSAGE: {'foo': 'bar'}
RECEIVED MESSAGE: {'foo': 'bar'}
RECEIVED MESSAGE: {'foo': 'bar'}
RECEIVED MESSAGE: {'foo': 'bar'}
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
SEND MESSAGE
SEND MESSAGE
SEND MESSAGE

Пример Reddis:

(rpc_video_player)[phas@mir src]$ python test_messages.py 
YUP I'M RUNNING
SEND MESSAGE
Connected to redis://localhost:6379//
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}
SEND MESSAGE
RECEIVED MESSAGE: {'foo': 'bar'}

Кажется, какая-то проблема связана с буфером / предварительной загрузкой / очередью / материалом, но у меня нет реальной подсказки. Я не могу понять, если это какая-то проблема конфигурации или своего рода ошибка / ограничение в транспорте в памяти. Любая помощь будет оценена.

0 ответов

Другие вопросы по тегам