В функции
в начало необходимо добавить проверку
if(!serial.canReadLine())
return;
так как readLine() возвращает всё что есть в порте даже если не пришёл конец строки, иначе строку.
И по этому у вас идёт парсинг с ошибками и летят исключения скорее всего (в питоне не спец)
Возможно тормоза связаны с этим.