【发布时间】:2018-07-17 18:37:19
【问题描述】:
我正在开发一个 Flask 应用程序,该应用程序会在 Nvidia Jestson 启动后立即启动。有2个线程: 1.串口读取不断从uart获取值并更新网页
- backgroundthread 根据从 html 表单获得的值进行一些计算。
我的代码是这样的:
thread1 = Thread()
thread2 = Thread()
thread1_stop_event = Event()
class serial_read_Thread(Thread):
def __init__(self):
self.delay = 0.1
self.port = serial.Serial ( port='/dev/ttyTHS2', baudrate=115200,
parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS, timeout=1)
super(serial_read_Thread, self).__init__()
def serial_read (self):
try:
x = self.port.read().decode()
recvd_string += x
#receive the list as string and convert it to list
for val in range(1, len(recvd_string)):
if (val % 2 != 0):
index = int(float(recvd_string[val]))
else:
received_signal_values[index] = recvd_string[val]
number1 = received_signal_values[0]
number2 = received_signal_values[1]
socketio.emit('newnumber', {'number1':number1, 'number2':number2}, namespace='/test')
time.sleep(self.delay)
except UnicodeDecodeError:
print("UnicodeDecodeError \n")
pass
def run(self):
self.serial_read()
class Backgroundthread(Thread):
def __init__(self):
super(Backgroundthread, self).__init__()
def process_data(self):
do_calculation()
def run(self):
self.process_data()
@app.route("/", methods=['GET', 'POST'])
def hello():
form = TestForm()
global thread2
if request.method == 'POST':
Get the values from the html form
if not thread2.isAlive():
thread2 = Backgroundthread()
thread2.start()
return render_template('hello.html', form=form)
@socketio.on('connect', namespace='/test')
def test_connect():
# need visibility of the global thread object
global thread1
print('Client connected')
#Start the serial read thread
print("Starting Serial Read Thread")
thread1 = serial_read_Thread()
thread1.daemon = True
thread1.start()
@socketio.on('disconnect', namespace='/test')
def test_disconnect():
print('Client disconnected')
if __name__== "__main__":
socketio.run(app)
当我手动运行代码时,我看到加载了我的页面的 Web 浏览器,值正在从串行线程更新。此外,当我通过网页输入值时,我看到正在处理后台线程。 但是当我从 Jetson 上的启动脚本运行代码时,同样的方法不起作用。我看到网页的值正在更新,但是当我从 html 表单输入值时,我没有看到正在处理的后台线程。另外我想知道这是否是将线程与烧瓶应用程序合并的正确方法。 对不起,很长的帖子。 提前致谢
【问题讨论】:
标签: python-3.x multithreading flask