@kondratev-ad

Использование Thread в Django приложении?

Подумываю использовать threading для создания подписчика на RabbitMQ в Django приложении.
При старте Django, создаю Thread с подписчиком, тем самым у меня запускается приложение Django и подписчик на RabbitMQ. Насколько это плохой/хороший метод? Сколько может жить такой Thread?

В __init__.py положил:
from pika import exceptions
from threading import Thread

def on_message(channel, method, properties, body):
    print(body)
    channel.basic_ack(delivery_tag=method.delivery_tag)

def consuming():
    while True:
        try:
            parameters = pika.URLParameters("rabbit_url.com")
            connection = pika.BlockingConnection(parameters)
            channel = connection.channel()   
            channel.basic_consume(queue="test", auto_ack=auto_ack, on_message_callback=on_message)
            channel.start_consuming()
       except exceptions.AMQPError as e:
            time.sleep(1)
            continue
        except Exception as e:
            time.sleep(1)
            continue

t = Thread(target=consuming, args=())
t.start()
  • Вопрос задан
  • 155 просмотров
Пригласить эксперта
Ответы на вопрос 2
@bacon
Тебе же уже писали, делаешь сustom commands и запускаешь ее отдельно, не мешая основным процессам django

PS ты упорно хочешь насильно вфигачить в Django RabbitMQ, зачем такое извращение? Django это обработка http, все остальное надо запускать отдельно. А ты и нормально контролировать RabbitMQ не можешь, еще и мешаешь Django работать. А еще, в продакшен обычно Django запускается больше чем одним процессом, в итоге у тебе будет столько же тредов с RabbitMQ.
PPSS еще и молчаливая обработка еxception, это вообще плохо, чё сломается, ты и не увидишь
Ответ написан
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Django разрабатывался синхронным и в конкурентной среде взрывается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы