Всем привет!)
В нашем джанго приложении мы используем Redis pubsub, для того, чтобы наши два независимих приложения джанги могли общаться между собой. Для работы pubsub нам нужно запустить сабскрайбера в том приложении, которое будет слушать каналы. Для этого мы запускаем в wsgi.py наш демон поток редиса.
from django.conf import settings
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
if settings.START_DELETE_SUBSCRIBER:
from app1.handlers import App1Subscriber
App1Subscriber().start()
Стартуем приложение мы таким образом : uwsgi --ini app1_uwsgi_config.ini
Содержание uwsgi файла:
[uwsgi]
http = 0.0.0.0:8000
chdir = /opt/app1
module = django_project.wsgi:application
master = True
cheaper = 2
processes = 16
harakiri = 70
max-requests = 5000
vacuum = True
reaper = True
enable-threads = True
single-interpreter = True
Вся проблема состоит в том, что порой uwsgi сервер после запуска просто не отдает никакого респонса, а порой всё ок. Он не выбрасывает никакие ворнинги или ошибки в консоль, просто запустился, но с 8000 порта хоста просто не приходит никакой респонс.
Вот реализация самого сабскрайбера:
class App1Subscriber(BasePubSub, metaclass=abc.ABCMeta):
redis = StrictRedis(settings.REDIS_HOST, settings.REDIS_PORT)
thread = None
pubsub = None
handler = None
channel = None
def __init__(self):
self.pubsub = self.redis.pubsub()
self.channel = **some_channel**
self.handler = **some_handler**
def start(self, daemon=True):
if self.thread:
raise RuntimeError('Subscriber is already running')
sub = getattr(self.pubsub, 'subscribe')
sub(**{self.channel: self.handler})
self.thread = self.pubsub.run_in_thread(daemon=daemon)
def stop(self):
if not self.thread:
raise RuntimeError('Subscriber is not running')
self.thread.stop()
@property
def running(self):
return self.thread.is_alive()
В чем может быть причинак такого поведения ?
P.S. Написал вопрос чтобы не выслушать о том, что не нужно использовать пабсаб, а потому что хочу понять в чем проблема при вот такой вот реализации и что я не знаю о поведении UWSGI.