Комбу "медленный" с транспортом в памяти
Я пытаюсь использовать комбу, чтобы ослабить какую-то часть моего программного обеспечения. Так как мне не нужны ни постоянство, ни межпроцессное взаимодействие, я бы не хотел использовать некоторый внешний демон, поэтому я попробовал транспорт в памяти. Я установил тестовый код
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'}
Кажется, какая-то проблема связана с буфером / предварительной загрузкой / очередью / материалом, но у меня нет реальной подсказки. Я не могу понять, если это какая-то проблема конфигурации или своего рода ошибка / ограничение в транспорте в памяти. Любая помощь будет оценена.