Я новичок во Flask, и мне было интересно, можем ли мы запускать разные процессы, принадлежащие разным классам, параллельно с приложением Flask.Моя структура кода очень похожа на это:
from flask import Flask, render_template, flash, request, jsonify
from flask_socketio import SocketIO, emit
from flask_wtf import FlaskForm
from wtforms import *
import multiprocessing as mp
import os
import serial
import time, datetime
# App config.
app = Flask(__name__)
app.config.from_object(__name__)
app.config['SECRET_KEY'] = '7d441f27d441f27567d441f2b6176a'
app.config['DEBUG'] = True
#turn the flask app into a socketio app
socketio = SocketIO(app)
class serial_read_Process():
def __init__(self):
self.delay = 0.2
self.port = serial.Serial ( port='/dev/ttyTHS2', baudrate=115200,
parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS, timeout=1)
def serial_read (self):
# read UART and process the incoming serial data and send it to webpage
currtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
socketio.emit('values', {'data1':data1, 'currtime':currtime}, namespace='/serial')
time.sleep(self.delay)
class ProcessWebPageData():
def __init__(self, name):
self.person_name = name
self.delay = 0.2
def process_data(self):
# process the data received from the webpage
time.sleep(self.delay)
@socketio.on('my_event', namespace='/test')
def test_message(message):
name_val= message.get('name')
ProcessDataObj = ProcessWebPageData()
process2 = mp.Process(target=ProcessDataObj.process_data, args=(name_val,)) # For Processing the data received from the web page
if not process2.is_alive():
thread2.daemon = True
thread2.start()
@app.route("/", methods=['GET', 'POST'])
def load():
return render_template('index.html')
@socketio.on('connect', namespace='/test')
def test_connect():
print('Client connected')
uart_read = serial_read_Thread()
process1 = mp.Process(target=uart_read.serial_read) # For Reading UART values
process1.daemon = True
if not process1.is_alive():
process1.start()
print("process started")
if __name__== "__main__":
socketio.run(app)
Я постоянно получаю значения из UART, когда я печатаю их в функции serial_read и вижу, что они печатаются.Я не вижу их на веб-странице, которую я отправляю через socketio.emit ().У меня есть код Javascript, где я получаю значения и использую его для отображения на веб-странице HTML.Также это правильный способ сделать?Любые материалы будут оценены.ТИА.