Асинхронный парсер + Django
Пытаюсь создать приложение, которое выводит пользователю информацию с асинхронного парсера. Парсер должен работать независимо и постоянно. Пользователь, заходя на нужную страницу сайта, должен автоматически как бы подписываться на поток независимо работающего парсера.
Например: парсер работает с помощью while True. Он собирает, обрабатывает и отдает обработанные данные. Пользователь зашел на сайт и ему должны быть видны те данные, которые отдал парсер при последней своей итерации. Когда парсер вновь собрал, обработал и отдал данные у пользователя должны автоматически обновиться данные и так по кругу.
К сожалению код проекта показать не могу, конфиденциальность.
Далее я опишу те способы, которые я нашел и пробовал применить. Все они так или иначе связаны с Django Channels и мультипроцессами, потоками.
Multiprocessing, Pipe. Предлагалось создать отдельный процесс скрипта (в моем случае асинхронный парсер) и с помощью Pipe передавать эти данные в другой скрипт (в моем случае Django View).
Веб-сокеты. Создать поток ВС и подключаться к нему.
SSE. Этот вариант мне показался наиболее верным, так как мне не нужно двустороннее соединение как в веб-сокетах. Мне нужно обновлять информацию только у клиента при обновлении информации на сервере. При поиске способа реализации SSE попался модуль daphne. По краткому гайду на сайте я подключил модуль и он работает, но только с примером с самого сайта. Суть в том, что создается отдельная функция, где в бесконечном цикле формируются некие данные и передаются пользователю. Каждый новый пользователь - это отдельный поток на сервере. Запустить свой парсер как сторонний модуль в этом цикле я не смог. Выдает ошибку RuntimeError: asyncio.run() cannot be called from a running event loop. Вот ссылка на сайт с гайдом. Там кратко. https://www.photondesigner.com/articles/server-sent-events-daphne?ref-yt-server-sent-events-daphne
Какой из этих способов наиболее верный и как правильно подключить свой парсер? Может быть я упустил еще какой-то способ, я не знаю.
Решение проблемы было легче, чем я предполагал.
Берем БД Redis, запускаем скрипт парсера отдельно и данные записываем в БД. В другом скрипте получаем данные из БД.
Хз насколько это "правильно", но пока так.