Мы создаем приложение, которое должно непрерывно передавать данные клиенту через сокет. Данные генерируются с помощью большой фоновой службы, которая постоянно работает и публикует результаты, которые затем необходимо передавать всем подключенным клиентам;Во всех примерах, которые я видел, клиент постоянно запрашивает данные, а не приложение на стороне сервера, поэтому я не уверен, что именно является наилучшей практикой в этом случае.
В настоящее время я собирался просто настроитьфоновые процессы после инициализации и настройки прослушивателя цикла для объекта очереди многопроцессорной обработки, который затем передает результаты, шаблон грязного кода:
def start_process():
q = Queue()
....do some stuff and link the queue with the process output
return q
def listen(q):
while running:
while not q.empty():
socket.emit('data', q.get())
if __name__ == '__main__':
q = start_process()
t = threading.Thread(target=listen, args = (q,))
t.start()
socketio.run(app)
Однако я не уверен, что это лучшая практика, и если этоЛучше запускать socketio, слушая очередь Redis, и запускать фоновый процесс как задание Redis, или, если есть лучший вариант.