Связь асинхронного фреймворка vkbottle с Django3
Требуется связать vkbottle и django3 для интеграций бота с сайтом. Бот должен иметь возможность спокойно использовать django-orm и работать со всеми моделями всех приложений. Вариант с написанием API в Django и работа с ним из бота - не подходит.
Проблема в том, что первая библиотека асинхронная, а вот сама django - не совсем. У меня никак не получается связать всё это в одном проекте. Были попытки поиграться с asyncio, получить loop, передать его конструктору Bot, создавать новый и передать его, но всё это или совсем не работало, или работало, но не правильно. После чего удалось всё "адекватно" завести используя celery. Я отправляю все callback-и в очередь, а таски получают их и отправляют в асинхронную функцию. Да, пример работает, но мне кажется это просто ужасный костыль, и ко всему прочему очень неудобный.
Один человек подсказал направление:
Ты конечно можешь попробовать порыться в исходниках django/asgiref и найти как грамотно привязаться к главному лупу, и с ненулевой вероятностью это получится сделать, но в миллиард раз быстрее будет просто создать где-нибудь отдельный поток, в нем новый луп, и от него уже плясать
Но, к сожалению, для этого у меня ума не хватило. Сейчас нет желания продолжать делать проект с такой архитектурой, так как в это уже начинает оборачиваться головной болью, но другого выхода я к сожалению не вижу.
Случайно наткнулся на django/channels, но не понимаю, сможет оно мне помочь, или нет.
Буду безмерно благодарен любому, кто поможет выбраться из этой ужасной ямы.
Ответы (1 шт):
Вообще лучший способ это не использовать джангу. А так можно разделить код, вынести орм (есть синк/асинк орм типа encode/orm) и уже импортировать её в веб фреймворк и бота. Засовывать бота в джангу очень плохая идея и делать так не надо.
