Я хотел бы читать из двух (или более) последовательных портов (/ dev/ttyUSB0 и т. Д.) Одновременно в python в Linux. Я хочу читать полные строки из каждого порта (в зависимости от того, какие данные) и обрабатывать результаты в полученном порядке (без условий гонки). В качестве простого примера можно просто написать строки в один объединенный файл.Чтение с двух последовательных портов асинхронно
Я предполагаю, что способ сделать это основан на pyserial, но я не могу понять, как это сделать. Pyserial имеет неблокирующие чтения, используя asyncio и используя threads. Asyncio отмечен как экспериментальный. Я предполагаю, что не будет никаких условий гонки, если обработка будет выполнена в asyncio.Protocol.data_received()
. В случае потоков обработка, вероятно, должна быть защищена мьютексом.
Возможно, это также можно сделать не в pyserial. Два последовательных порта можно открыть как файлы, а затем прочитать, когда данные доступны с помощью select()
.
Сделайте два потока, которые считываются из последовательных портов и помещают данные для обработки в очередь. Посмотрите «производитель-потребитель-питон». –
@AlexHall Звучит как легкое решение проблемы. Отправьте ответ с помощью потоков + queue + pyserial для мгновенного upvote и принимайте :) –