При вызове вашего последовательного устройства вы можете использовать аргумент timeout = в вызове.
У меня были проблемы с тем же случаем, и я прекратил использовать timeout + конструкцию, чтобы гарантировать, что порт закрыт:
serial = Serial(...)
try:
# do your stuff here
finally:
serial.close()
Проверьте также модуль atexit на случай, если вы остановите код другим способом, чем control + c