Всем привет
Задача такая: хочу интегрировать чат в Django-приложению, насчёт Django-channels в курсе. Однако в том числе в образовательных целях пытаюсь прикрутить чат на NodeJs, кроме того, в случае успеха, я буду понимать, каким образом можно расширять систему и не ограничиваться одним языком, использовать наиболее подходящие под задачу решения и тд.
Сейчас идея такая, при инициализации джанги создаются треды (хотя тут тоже вопрос, GIL есть всё-таки) или асинхронные воркеры, которые в бесконечном цикле общаются с нодой посредством брокера (RabbitMQ, например). Нода отвечает за общение с клиентом по сокетам, к серверу обращается за сохранением в бд, аутентификацию и тд.
Насчёт Celery в курсе, однако она юзает брокер в том числе для собственных нужд, ну и опять же, хочу обойтись без него в учебных целях.
Такие вопросы:
1) Где правильно инициализировать тред/корутину таким образом, чтобы был доступ до моделей джанги? К тому же, хотелось бы при этом иметь вменяемую архитектуру, ps я создал работающий тред в файле wsgi.py после инициализации приложения, но это имхо не правильно.
2) Есть ли какие-то best-practice по этой проблеме? Как лучше всего разнести логику на разные компоненты.
В идеале я бы хотел оставить в Django только синхронную работу, а асинхронную вынести за пределы.
Проблема с потоками не в GIL, а в том, что Django не является потокобезопасным. Нужен отдельный процесс, читающий из очереди и работающий с базой Джанги, то есть придётся велосипедить свою Celery.
Проблема с потоками не в GIL, а в том, что Django не является потокобезопасным.
А зачем оно джанге и автору? Джанга же, на сколько знаю, stateless. Можно поподробнее? Не в контексте задачи автора, а в целом.
Или тут имеется ввиду, что небезопасно запускать потоки не предназначенные для обработки запросов?