Общие советы по работе с pyserial смотрите в поиске, предложенном S.Lott в комментарии.
Относительно лучшей стратегии реализации вашего приложения - все зависит от того, как определены ваши протоколы. Устройства сразу отвечают на запросы? Или они постоянно отправляют данные, которые должны контролироваться? Это важно определить, так как это, безусловно, влияет на то, как вы хотите обрабатывать связь.
В общем, я считаю простым и стабильным иметь отдельный поток, считывающий все с последовательного порта и просто закачивающий данные в Queue
. В этом случае основная логика приложения может запрашивать эту очередь в любое время и читать данные.