Мне нужно настроить работника, который обрабатывает некоторые данные после определенного события. Я знаю, что могу запустить рабочий с python manage.py runworker my_worker
, но мне нужно было бы запустить рабочий в том же процессе, что и основное приложение Django, в отдельном потоке.
Зачем он мне нужен в отдельнома нить не в отдельном процессе? Потому что работник будет выполнять довольно легкую работу, которая не будет перегружать ресурсы сервера, и, кроме того, усилия по настройке для нового процесса в производственном процессе не стоят выигрыша в производительности. Другими словами, я бы предпочел оставить это в процессе Джанго, если это возможно.
Почему бы не выполнить работу синхронно? Потому что это отдельная логика, которую необходимо расширить, и она выходит за пределы основной области HTTP-запросов-ответов. Это задача постобработки, которая не мешает основной логике. Мне нужно отделить эту задачу с точки зрения инфраструктуры, а не только с точки зрения логики (например, с помощью простых сигналов).
Есть ли какая-либо возможность, предоставляемая Django Channels , для запуска работника втакой способ? Будут ли какие-либо недостатки запускать рабочий вручную в отдельном потоке?
Прямо сейчас у меня есть настройка для потока потребителя брокера сообщений (без использования Каналы ), поэтому у меня есть записьточка для запуска нового рабочего потока. Но, как я видел из команды Channel runworker
, она загружает все приложение, поэтому не кажется, что наивный вызов worker.run()
является правильным способом сделать это (яможет быть не так с этим).