Как настроить streamlit на работу с поточным получением данных?
У меня есть подключенное устройство к usb порту на компьютере, которое в режиме потока постоянно отсылает данные. Мне эти данные нужно получать и отображать на dashboard в streamlit сервисе. Вот часть кода, которая отвечает за подключение к порту и получение данных.
port_name = st.selectbox("Select PORT", [port.device for port in list_ports.comports()])
start_button = st.empty()
dataframe_widget = st.dataframe([])
if start_button.button('Start', key='start'):
serialPort = serial.Serial(port=port_name, baudrate=115200,
bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE)
start_button.empty()
if st.button('Stop', key='stop'):
serialPort.close()
pass
else:
while 1:
if serialPort.in_waiting > 0:
serialString = serialPort.readline()
new_data = list(map(int, serialString.decode('Ascii').split()))
dataframe_widget.add_rows(new_data)
Проблема возникает при нажатии на кнопку "Stop". По какой-то причине порт не закрывается и к нему невозможно подключиться второй раз без принудительной остановки процесса. Есть ли какие-то практики считывания потока данных в streamlit, может быть в параллельном потоке? Как я могу это исправить?