Как настроить 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, может быть в параллельном потоке? Как я могу это исправить?


Ответы (0 шт):