Я делал на основе terminal.py (пример из библиотеки serial) — класс с методом reader,
который while(1) висит на комп порту и разбирает оттуда байты
Метод запускается в отдельном потоке
Работа с некоторыми объектами изнутри потока обязательно with lock.